vim是linux下命令行一款经典编辑器,操作简单、功能强大,这是很多unix上元老级程序员的挚爱。这是我总结整理的vim最常用的命令集合,没事常阅读,最重要的是有问题了,尝试用这些东西去解决问题,不一定是高效快捷的,但起码是有效的。
复制/粘贴/删除
字符操作: nx #向后删除 n 个字符,若没有 n 向后删除一个字符 nX #向前删除 n 个字符,若没有 n 向前删除一个字符 d0 #那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 d$ #删除游标所在处,到该行的最后一个字符 y0 #复制光标所在的那个字符到该行行首的所有数据 y$ #复制光标所在的那个字符到该行行尾的所有数据 p #将已复制的数据在光标下一列贴上 P #将已复制的数据在光标上一列贴上 行操作: 删除某区域: 复制某区域: |
/word #将光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,正则表达式 ) ?word #将光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,正则表达式 ) gd #将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词 gD #将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词 # #光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示 * #光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示 :nohl #取消高亮显示 |
>> #将当前行右移一个单位 << #将当前行左移一个单位(一个tab符) == #自动缩进当前行 |
mc #把当前位置记录为书签 c ( c 为任意字符 ) #当定义多个位置的标签为一样时,只有最后一个定义的位置标签会生效 `c #将光标转移到书签 c 处( c 为任意字符 ) |
:%!xxd #按十六进制查看当前文件 :%!xxd -r #从十六进制返回正常模式 |
[Ctrl+n] #自动补全(前提是以前打过的单词) [Ctrl+p] #自动补全(前提是以前打过的单词) |
进入标记文本模式 v #进入标记文本模式,单字符模式 V #进入标记文本模式,行模式 [ctrl+v] #进入标记文本模式,列模式,类似于UE的列模式 对标记文本模式中区域选择 移动标记文本模式中光标位置 对标记文本模式中数据操作 |
:vne [filename] #打开文件 filename,并把光标所在窗口沿横向分为两个窗口 :sp [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口 :S [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口 :new [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口 +------------------------------------------------------------------------------+ 在 new 前面可以加的参数: leftabove #当前窗口的左上方 aboveleft #同上 rightbelow #当前窗口的右下方 belowright #同上 topleft #整个 Vim 窗口的最上面或者最左边 botright #整个 Vim 窗口的最下面或者最右边 +------------------------------------------------------------------------------+ :only #关闭除了编辑以外的窗口,但是那些窗口中要是有文本被改写过并且没有保存那么操作将失败 :close #关闭编辑窗口,如果编辑窗口文本修改过且未保存,或编辑窗口为唯一窗口的话,操作失败 :vertical diffsplit [file] #纵向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同 :diffsplit [file] #横向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同 :res -n #窗口高度减小n :res +n #窗口高度增大n [ctrl+w]+[=] #窗口等宽 [ctrl+w]+[h] #将光标移动到左方的窗口 [ctrl+w]+[←] #将光标移动到左方的窗口 [ctrl+w]+[l] #将光标移动到右方的窗口 [ctrl+w]+[→] #将光标移动到右方的窗口 [ctrl+w]+[j] #将光标移动到下方的窗口 [ctrl+w]+[↓] #将光标移动到下方的窗口 [ctrl+w]+[k] #将光标移动到上方的窗口 [ctrl+w]+[↑] #将光标移动到上方的窗口 [ctrl+w]+[t] #将光标移动到最上方的窗口 [ctrl+w]+[b] #将光标移动到最下方的窗口 [ctrl+w]+[ctrl+r] #将光标所在窗口下移 [ctrl+w]+[q] #退出光标所在窗口,相当于在光标所在窗口的命令行模式中输入:q [ctrl+w]+[+] #扩大所在窗口 [ctrl+w]+[-] #缩小所在窗口 对所有窗口执行命令 |
多档案编辑
:n #编辑下一个档案 :N #编辑上一个档案 :files #列出目前这个 vim 的开启的所有档案 |
:sh #打开 shell,可执行shell命令,输入exit退出shell返回到vim :!cmd #直接执行 shell ( cmd 表示为任意 shell 命令 ) |
:n1,n2 co n3 #将 n1 行到 n2 行之间的内容拷贝到第 n3 行下.若无『 ,n2』则复制 n1 到 n3 行下 :n1,n2 m m3 #移动 n1 行到 n2 行之间的内容移至第 n3 行下.若无『 ,n2』则将 n1 内容移到 n3 行下 :n1,n2 d #删除 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行删除 :n1,n2 y #复制 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行复制 :[range]s/{pattern}/{string}/[flag] [count] #字符替换 +------------------------------------------------------------------------------+ 格式说明: range #表示行数 % #表示所有行 n1,n2 #表示由 n1 行到 n2 行之间,若无 n2 则表示在 n1 行处 s #表示substitution,替换的意思 pattern #表示被替换的字符串 string #表示替换的字符串 flag #表示标志,取值g,i,c等 g #表示global,全部 i #表示ignore,忽略大小写 c #表示confirm,一个一个交互确认替换 count #表示从当前行到接下来的第几行,表示范围 +------------------------------------------------------------------------------+ |