实用技巧
删除一行 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://romantic-hoover-f991f1.netlify.com/cookbook/tool/vimbest/
授权协议:
CC BY-SA 4.0