vim实用技巧实践

实用技巧

删除一行 dd 不就行了。。为什么要鼠标选中一行之后按下backspace?

清除一行内容S 不就行了,为什么还要鼠标选中一行然后按下backspace?

给一行末尾补分号,A; 不就好了,为什么还要鼠标移过去末尾点一下然后按下; ?

然后给n行末尾补分号,Vjj*选中多行 :normal . 不就好了, 为什么要鼠标一个一个点了然后一个个补?

复制a行插入到b行后, dd掉a行在b行那按下p不就好了。 为什么要鼠标选中a,ctrl+x ,然后到b的末尾按下回车,然后ctrl-v ?

vim 比较文件/多窗口操作

vim -d file1 file2 ...  #垂直打开多窗口,并且进行比较
vimdiff file1 file2 ..  #等同于上一句

打开多个窗口的命令以下几个:

    #横向切割窗口
:new+窗口名(保存后就是文件名)
    :split+窗口名,也可以简写为:sp+窗口名
     #纵向切割窗口名
     :vsplit+窗口名,也可以简写为:vsp+窗口名

     vim -o file1 file2 ...  #水平打开多窗口,
     vim -O file1 file2 ...  #垂直打开多窗口,
     vim -d file1 file2 ...  #垂直打开多窗口,并且进行比较
     vimdiff file1 file2 ..  #等同于上一句

关闭多窗口 可以用:q!,也可以使用:close,最后一个窗口不能使用close关闭。使用close只是暂时关闭窗口,其内容还在缓存中,只有使用q!、w!或x才能真能退出。

 #关闭窗口
     q  或 close   #关闭当前窗口
     only          #保留当前窗口,关闭其它所有窗口
     qall(qa)          #退出所有窗口
     wall          #保存所有窗口

窗口切换

ctrl+w+j/k #通过j/k可以上下切换,或者:ctrl+w加上下左右键,还可以通过快速双击ctrl+w依次切换窗口。

多标签 直接在编辑的时候输入:

vim -p 要编辑的文件名
#如vim -p * 就是编辑当前目录的所有文件
#多个标签间进行切换时向右切换gt,向左切换用gT
#在编辑的时候想增加一个标签就可以:tabnew filename
:tabc       关闭当前的tab
:tabo       关闭所有其他的tab
:tabs       查看所有打开的tab
:tabp      前一个
:tabn      后一个

vim代开HEXl十六进制模式

Same as hex, just pass -b flag to xxd:

:%!xxd -b

vim中执行shell命令

1):!command 不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容 例如 :!ls -l

特别的可以运行:!bash来启动一个bash shell并执行命令,不需要退出vim 2):r !command 将shell命令command的结果插入到当前行的下一行 例如 :r !date,读取系统时间并插入到当前行的下一行。 3):起始行号,结束行号 !command 将起始行号和结束行号指定的范围中的内容输入到shell命令command处理,并将处理结果替换起始行号和结束行号指定的范围中的内容 例如 :62,72 !sort,将62行到72行的内容进行排序 可以只指定起始行,例如:62 !tr [a-z] [A-Z],将62行的小写字母转为大写字母 当前光标所在行,除可以指定行号外,也可以用.表示,例如:. !tr [a-z] [A-Z],将当前行的小写转为大写 4):起始行号,结束行号 w !command 将起始行号和结束行号所指定的范围的内容作为命令command的输入。不会改变当前编辑的文件的内容 例如 :62,72 w !sort,将62行到72行的内容进行排序,但排序的结果并不会直接输出到当前编辑的文件中,而是显示在vim敲命令的区域 特殊的可以下面这么用 :62 w !bash,将会把第62行的内容作为bash命令来执行并显示结果,而且不会改变当前编辑的文件的内容 同样的:. w !bash,将当前行的内容作为bash命令来执行 例如52行内容为ls -l 那么输入:52 w !bash就跟执行!ls -l是一样的效果,如果你用的shell是bash shell

如果输入的是:52 !bash,那么会把第52行的内容也就是ls -l作为命令执行,同时命令的输出结果会替换第52行的内容,注意其中的区别。

多行编辑

原生列模式(多行注释)

多行注释按键操作: 注释:Ctrl-v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I,再插入注释符比如”#“,按Esc,就会全部注释了。 删除:Ctrl-v 进入列编辑模式,向下或向上移动光标,选中注释部分,按d,就会删除注释符号。

多行注释使用替换命令: :%s/^/\/\//g来在全部内容的行首添加//号注释 :2,50s/^/\/\//g在2~50行首添加//号注释 反过来替换既是删除操作。

多行标记插件

VIM单文件操作

光标定位快捷键

到指定行  :行号,行号G
 到文件头 1G
 到文件尾 G
 左下上右 h,j,k,l
 下一个字 w,上一个字 b   
 到行首   ^
 到行尾   $
 行尾插入 A,添加空行 o

在函数中定位光标

[[ 转到上一个位于第一列的“{” ]] 转到下一个位于第一列的“{” { 转到上一个空行 } 转到下一个空行

查找当前文件

n,N 查找到key后,n跳到后一个位置,N跳到前一个位置

  • , # 当前光标所在的词key作为关键字,精确匹配查找,相当于/<key>

g*, g# 当前光标所在的词key作为关键字,忽略大小写查找,相当于/key /key 从当前光标位置开始向后查找key

?key 从当前光标位置开始向前查找key /<key>,?<key> 精确匹配查找key

批量替换

:%s/要被取代的字串/新的字串/g

复制粘贴删除

  复制行 yy    复制n行 nyy
  粘贴行 p
  删除行 dd    删除n行 ndd
  删除字 dw    复制字  yw

  可视块选择复制:
         进入可视化模式 v,V,Ctrl-v
         可视化模式下,方向键选择块
         按y复制选择的块
微信扫一扫交流

作者:ryanemax
微信关注:ryanemax (刘雨飏)
本文出处:https://futurestack.cn/cookbook/tool/vimbest/
授权协议: CC BY-SA 4.0