Chinaunix首页 | 论坛 | 博客
  • 博客访问: 219706
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-09 10:55
个人简介

每天改变一点点,生活充满了惊喜。

文章分类

全部博文(42)

文章存档

2016年(8)

2015年(29)

2014年(5)

我的朋友

分类: LINUX

2015-09-29 14:48:06

Vim的强大不用赘述,他的快捷键操作方式也是无比强大,但实际上那么多繁杂的操作方法要全部记住基本不太可能,也无必要。
我个人习惯于在Vim下编写代码,平时有时间也会去深入了解下Vim的相关知识,毕竟有时候一个简单的操作技巧,
能让你的编码效率提升不少,以下是我收集也比较常用的操作(vim基本操作按键网上很多,这里不再例举)。
----------------------------------------------------------------------------------------------
屏幕滚动
(1) zz 重绘屏幕,把当前行显示在窗口正中
(2)ctrl-f 向后翻页 ctrl-b 向后翻页

移动光标

(1){Ctrl-b} 上一页, {Ctrl-f} 下一页  
(2)上,下,左,右: h,j,k,l  可以配合数字使用。gj,gk在 屏幕行移动。(文本实际的一行在屏幕上展示为多行,称为屏幕行)
(3)0(零) 跳至行首,^ 跳至行首(不算缩进)$ 跳至行尾。加上 前缀g都限定在当前屏幕行移动。
(4) 空格键  向右 Backspace 向左, Enter 移动到下一行首, - 移动到上一行首。
(5)按单词、字串移动:
        下一个单词首 w  下一字串首 W长跳;
        前一个单词首 b 前一字串尾部B
        下一个单词尾e,下一字串尾部E
        ge
 反向移动到上一字的结尾。

跳转光标

(1)gg 跳至第一行,G 跳至最后一行,6G 跳至第6行。
(2)(    跳至上一句开头,    )    跳至下一局开头
(3){    上一段开头,    }    下一段开头
(4)将光标定位到屏幕的顶端 M  屏幕的中间 L  屏幕的底端。
(5)m{a-zA-Z}  小写位置标记在缓冲区局部可见,大写标记全局可见。
        
mm设置书签m, `m 跳转到书签m处,光标移动至标记标记书签处,'m    移动光标至书签行的行首。
        VIM 自动位置标记:
        ``    上次跳转之前的位置
        `.    上次修改的位置
        `^    上次插入的位置
        `[    上次修改或复制的起始位置,    `]    上次修改或复制的结束位置
        `<    上次高亮选取起始位置,    `>    上次高亮选取结束位置
(6)改变列表(Vim记录文档的改变)跳转:    g;    反向遍历,g,    正向遍历
        

文本查找
(1)f{char} 在当前行中查找字符{char}F{char} 与f{char}方向相反。
         t{char} 跳转到{char}字符的前一个字符,T{char} 反向跳转。
         ; 重复上一个f命令(跳至下一个匹配),,(英文逗号)回退(返回上一个匹配  
        Notice: 在使用字符查找命令时,尽量选择出现频率较低的字母作为目标字符。如,大写字母或标点符号,等。

(2)/pattern 文档中查找下一个匹配性,?pattern 上一处匹配,n 下一个,N 前一个
(3)* 对光标所指的词进行搜寻,向下搜索 # 是向上搜索

文本替换
(1):s/target/replacement 执行替换,重复下一个匹配项的替换,u 回退。
        文档中全部做替换  :s/target/replacemen/g

(2)r 单字符替换, R 多字符替换, gR 替换时按照屏幕实际显示的宽度来替换(如Tab只是一个字符,但屏幕上的占位可能是多个)

文本转换

(1) g~ 反转大小写 gu 转小写 gU转大写,(gUU 当前行全传大写,还有 gUaW [当前字 ]、gUap [当前段落]
(2)~ 
当前字符替换大小写

文本复制与粘贴
(1)复制整个文档内容:ggyG
(2)复制一个字: yw  复制从光标开始的n个单词: nyw
(3)复制到行末: y$  复制从光标到行首的内容: y^
(4)复制6行:6yy
(5)将1-10行插入到第20行之后:  :1,10 co 20

文本删除

普通模式下
(1)c 删除指定的文本并切换到插入模式, cw删除当前字。 C 删除直到行尾。ci} 修改花括号内内容。
(2)s 删除当前字符S 删除当前行内容(保留行)
  以上操作结束后,都会进入插入模式
(3)dl 删除一个字符 daw 删除一个字 dap 删除一个段落(以空行界定,段落后的空行也会删除)
(4)dt. 或 ct. 删除当前字符至下一个英文句号出现的前一个字符处,后者会进入插入模式。(常用语,删除一行后半段,并保留最后的符号)
插入模式下
(1){Ctrl-h}{Ctrl-Backspace} 删除一个字符,{Ctrl-w删除一个字,{Ctrl-u} 删除当前字符到行开头部分。
        Bash Shell命令行终端下的命令编辑以上操作也适用。

文本插入
(1)I 在行首插入,i 当前字符前插入
(2)A 在行尾插入,a 当前字符后插入
(3)O 当前行前插入新行,o 当前行后插入新行
(4)ea 当前单词尾部插入,gea 上一单词结尾插入,Ea 当前字串尾部插入

文本移动
(1)><    行右移 和 左移,用于代码缩进修改,每次移动一个缩进单位。
        >> 当前行左移 ,<< 右移。
        >G 当前行到最后一行左移;>2 当前行及下面两行左移。

可视化模式下的编辑(块操作)
(1)v 进入可视模式,单字符模式。或 shift+v 行模式, {Ctrl+v} 列模式。
(2)o 跳转选中块的末端, O 跳至首端
(3)U 选中块都转换成大写,> 块右移, < 块左移,  y 复制块,  d 删除块, ~ 切换块中内容的大小写, r 替换, c 删除并进去插入模式。 
(4)IA 进入插入模式,置光标于选块的开始和结尾。(注意 i 和 a 键,可视模式下被当作一个文本对象的组成部分)
(5)aw 选中一个字, ab 选中括号中的所有内容,包括括号本身, aB 选中{}括号中的所有内容。
         ib 选中括号中的内容,不含括号 iB 选中{}中的内容,不含{}。
(6)gv 重选上一次由可视模式选择的文本范围
(7)vi} 高亮选中花括号中内容,另外逗号、单引号、双引号等也是一样的。va} 高亮选中花括号及花括号中的内容。
        注:Vim的文本对象由两个字符组成,第一个字符永远是i或a,以i(inside)开头的文本对象选择分隔符内内容,a(all)开头的文本对象选择包括分隔符在内的文本。

剪切板粘贴
(1)如果设置了代码格式,每次要粘贴的话,先 : set paste,然后粘贴,然后再 : set nopaste
        否则粘贴的内容会被自动的加上格式。

宏录制
q{reg} 命令开始在{reg}寄存器里录制宏。然后正常地输入编辑命令,最后用 q 退出录制状态。
如果你想重复所录制的命令,只需执行 @{reg} 命令。
Vim总共提供26个这样的宏寄存器。 
----------------------------------------------------------------------------------------------
vimdiff
1.文件跳转
(1)跳转:]c ,反向跳转是:[c
(2)如果希望在两个文件之间来回跳转,可以用下列命令序列:
        Ctrl-w, w

2.同步差异
dp (diff "put")
如果希望把另一个文件的内容复制到当前行中,可以使用命令
do 
(diff "get",之所以不用dg,是因为dg已经被另一个命令占用了,o 代表是“obtain”)

3.刷新
    在修改一个或两个文件之后,vimdiff会试图自动来重新比较文件,来实时反映比较结果。
    但是也会有处理失败的情况,需要手工来刷新比较结果:
    :diffupdate
----------------------------------------------------------------------------------------------
Version 1.1 2015/10/08 by SunnyChan
加上版本号与时间,便于后续更新。
参考:
1.《Vim 实用技巧》《Practical Vim - Edit Text at the Speed of Thought》
阅读(4459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~