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)H 将光标定位到屏幕的顶端 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 进入可视模式,单字符模式。 V 或 shift+v 行模式, {Ctrl+v} 列模式。
(2)o 跳转选中块的末端, O 跳至首端
(3)U 选中块都转换成大写,> 块右移, < 块左移, y 复制块, d 删除块, ~ 切换块中内容的大小写, r 替换, c 删除并进去插入模式。
(4)I 和 A 进入插入模式,置光标于选块的开始和结尾。(注意 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) |