vim 命令集合

来源:互联网 发布:全景图生成软件 编辑:程序博客网 时间:2024/06/05 20:56

linux 下命令行模式打开 vim 的方式

vim FileName                       打开文件 FileName,并将光标置于第一行首vim +n FileName                    打开文件 FileName,并将光标置于第 n 行首vim + FileName                     打开文件 FileName,并将光标置于最后一行vim + /pattern File                打开文件 File,并将光标置于其中第一个于 pattern 匹配的字符串处vim –r FileName                   在上次正用 vi 编辑 FileName 发生系统崩溃后,恢复FileNamevim File1 … Filen                 打开多个文件,依次对之进行编辑vim -o File1 … Filen              用水平分隔的方式打开多个文件然后进行编辑vimdiff filename1 filename2        用垂直分割的方式打开两个文件 filename1,filename2 然后显示出两个文件的不同的比较

插入数据

基本操作

行操作:I                 在光标所在行首插入文本A                 在光标所在行尾添加文本o(open)           在光标所在行下面添加一行O                 在光标所在行上面添加一行nS                从当前行开始,删除向下 n 行并进入编辑模式,若无 n 删除当前所在行,并进入编辑模式:r filename       在编辑数据中读入一个文件内容数据,并把这些数据添加到光标所在行后面字符操作:i(insert)         在光标前插入文本a(append)         在光标后插入文本r(Replace)        替换光标所在处字符,结束替换R                 替换多个字符,以按下 [Esc] 键标志替换结束ns                从当前光标位置处开始,删除 n 个字符并进入编辑模式,若无 n 删除一个字符,并进入编辑模式

改变某区域:

可以重复的:[c]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]          c:                      表示改变操作重复操作次数:           num 表示操作重复次数操作区域选择:    h              改变光标前一个字符    l              改变光标所在处的字符    j              改变本行与下一行    k              改变本行与上一行    w              改变光标开始到下一个单词词首处    b              改变光标开始到上一个单词词首处    e              改变光标开始到这个单词的结尾处    (              改变光标开始到句子结束处    )              改变光标开始到句子开始处    {              改变光标开始到段落开始处    }              改变光标开始到段落结束处    $              改变从光标开始处到行尾处    G              改变从光标所在行到行尾处    /word          改变从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式  )    ?word          改变从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式  )    tc             改变从光标开始处到下个 c 字符处,不含 c ( c  指代任意字符 )    Tc             改变从光标开始处到上个 c 字符处,不含 c ( c  指代任意字符 )    fc             改变从光标开始处到下个 c 字符处,含 c ( c  指代任意字符 )    Fc             改变从光标开始处到上个 c 字符处,含 c ( c  指代任意字符 )    `c             改变从光标开始到标记 c 这个位置不可重复的:[c]+[ 0 / ^ / H / L]c:                     表示改变操作操作区域选择:    0             改变从光标所在处到某一行的开始位置    ^             改变到某一行的第一个字符位置(不包括空格或TAB字符)    L             改变直到屏幕上最后一行的内容    H             改变直到屏幕上第一行的内容[c]+[i]+[ { / } / ( / ) / " / ' ]c:                     表示改变操作i:                     表示 in 即在里面的意思操作区域选择:    {             改变在 {} 中内容( 要求光标在 {} 内 )    }             改变在 {} 中内容( 要求光标在 {} 内 )    [             改变在 [] 中内容( 要求光标在 [] 内 )    ]             改变在 [] 中内容( 要求光标在 [] 内 )    (             改变在 () 中内容( 要求光标在 {} 内 )    )             改变在 () 中内容( 要求光标在 () 内 )    "             改变在 "" 中内容( 要求光标在 "" 内 )    '             改变在 '' 中内容( 要求光标在 '' 内 

保存/退出

:q                     退出 vim 返回到 shell,若有修改未被保存,vi 在末行给出提示信息并不退出 vim 到 shell:q!                    退出 vim 返回到 shell,放弃未保存的修改:wq                    保存后退出,无论文件是否有修改,都更新文件的修改时间:x                     保存后退出,若文件没有修改的话,不更新文件的修改时间:w                     将编辑的数据写入硬盘中:w!                    若文件属性为"只读"时,强制写入该文件:w filename            写入当前文件到 filename 文件ZZ                     若文件没有更动,则不保存离开,若文件被更动过,则保存后离开:n1,n2 w filename      将 n1 到 n2 的内容保存到 filename 这个文件中

显示与取消行号,制表符,结尾标志位

:set nu                显示行号,设置之后,会在没一会的前缀显示该行的行号:set nonu              与 :set nu 相反,为取消行号:set list              显示制表符(^I)与行尾标志位($):set nolist            与 :set list 相反,为取消显示制表符和结尾标志符

光标移动方法

位移

字符操作:nh / n←              向左移动 n 字符,无 n 移动一字符nl / n→              向右移动 n 字符,无 n 移动一字符n<space>      n 表示“数字”,光标会向右移动这一行 n 个字符.0              这是数字 “0”:移动到这一行的最前面字符处^                     移动到这一行的最开始字符处行操作:nj / n↓              向下移动 n 行,无 n 移动一行nk / n↑              向上移动 n 行,无 n 移动一行[Ctrl+p]              光标上移一行[Ctrl+n]              光标下移一行n+                    光标下移到 n 行头,若没有 n 光标移到下行行头n-                    光标上移到 n 行头,若没有 n 光标移到上行行头n$                    光标下移到 n 行尾,若没有 n 则移动到本行行尾n_                    向下移动 n-1 行,并光标移动到非空白行首H                     光标移动到这个屏幕的最上方哪一行M                     光标移动到这个屏幕的中央哪一行L                     光标移动到这个屏幕的最下方哪一行nG                    n 为数字.移动到这个文件的第 n 行.若没有 n 则移动到最后一行gg                    移动到这个文件的第一行,相当于 1Gn<Enter>              向下移动 n 行,无 n 移动一行

跳转

W / w         光标右移一个字至字首.B / b         光标左移一个字至字首.E / e         光标右移一个字至字尾.(             光标移到上个句子句首.)             光标移到下个句子句首.{             光标移到上个段落句首.}             光标移到下个段落句首.fc            光标跳转到本行下一个字符 c 处( c 指代任意字符 )Fc            光标跳转到本行上一个字符 c 处( c 指代任意字符 )tc            光标跳转到本行下一个字符 c 的前一个字符处( c 指代任意字符 )Tc            光标跳转到本行上一个字符 c 的后一个字符处( c 指代任意字符 )/word         光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 )?word         光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 )#             光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示*             光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示gd            将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词gD            将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词`.            跳转至上次编辑位置`c            将光标转移到书签 c 处( c 为任意字符 )下面两个与 / 与 ? 组合着用:n             下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个,但其实它只会在高亮字符中切换)N             上一个匹配(同上)与 f/F 配合使用的命令:;             重复上一个f命令

复原与重做

.            重复前一个操作u            复原前一个操作[Ctrl]+r    重做上一个操作

屏幕滚动

[Ctrl+f]      屏幕“向下”移动一页,相当于[Page Down]按键[Ctrl+b]      屏幕“向上”移动一页,相当于[Page Up]按键[Ctrl+d]      屏幕“向下”移动半页[Ctrl+u]      屏幕“向上”移动半页[Ctrl+e]            屏幕向下滚一行[Ctrl+y]            屏幕项上滚一行nz                    将第 n 行滚至屏幕顶部。不指定 n 时将当前行滚至屏幕顶:$                    屏幕滚到文章最后一行:0                    屏幕滚到文章最开始一行

复制/删除/粘贴

总述

字符操作:nx                    向后删除 n 个字符,若没有 n 向后删除一个字符nX                    向前删除 n 个字符,若没有 n 向前删除一个字符d0                    那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符d$                    删除游标所在处,到该行的最后一个字符y0                    复制光标所在的那个字符到该行行首的所有数据y$                    复制光标所在的那个字符到该行行尾的所有数据p                     将已复制的数据在光标下一列贴上P                     将已复制的数据在光标上一列贴上行操作:ndd                   删除光标所在的向下 n 列,若没有 n 删除游标所在的那一整列dnG                   删除光标所在到第 n 行的所有数据,若没有 n 删除光标所在到最后一行的所有数据nyy                   复制光标所在的向下 n 行,若无 n 复制游标所在的那一行ynG                   复制游标所在列到第n行的所有数据,若无 n 复制游标所在行到最后一行的所有数据J                     将光标所在列与下一列的数据结合成同一列

删除某区域:

可以重复的:[d]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]          d:                    表示删除操作重复操作次数:         num 表示操作重复次数操作区域选择:    h             删除光标前一个字符    l             删除光标所在处的字符    j             删除本行与下一行    k             删除本行与上一行    w             删除光标开始到下一个单词词首处    b             删除光标开始到上一个单词词首处    e             删除光标开始到这个单词的结尾处    (             删除光标开始到句子结束处    )             删除光标开始到句子开始处    {             删除光标开始到段落开始处    }             删除光标开始到段落结束处    $             删除从光标开始处到行尾处    G             删除从光标所在行到行尾处    /word         删除从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并可以使用 正则表达式 )    ?word         删除从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 )    tc            删除从光标开始处到下个 c 字符处,不含 c ( c  指代任意字符 )    Tc            删除从光标开始处到上个 c 字符处,不含 c ( c  指代任意字符 )    fc            删除从光标开始处到下个 c 字符处,含 c ( c  指代任意字符 )    Fc            删除从光标开始处到上个 c 字符处,含 c ( c  指代任意字符 )    `c            删除从光标开始到标记 c 这个位置不可重复的:[d]+[ 0 / ^ / H / L / { / }[ / ]( / ) / " / ']d:                     表示删除操作操作区域选择:    0             删除从光标所在处到某一行的开始位置    ^             删除到某一行的第一个字符位置(不包括空格或TAB字符)    L             删除直到屏幕上最后一行的内容    H             删除直到屏幕上第一行的内容[d]+[i]+[ { / }[ / ]( / ) / " / ']d:                     表示删除操作i:                     表示 in 即在里面的意思操作区域选择:    {             删除在 {} 中内容( 要求光标在 {} 内 )    }             删除在 {} 中内容( 要求光标在 {} 内 )    [             删除在 [] 中内容( 要求光标在 [] 内 )    ]             删除在 [] 中内容( 要求光标在 [] 内 )    (             删除在 () 中内容( 要求光标在 {} 内 )    )             删除在 () 中内容( 要求光标在 () 内 )    "             删除在 "" 中内容( 要求光标在 "" 内 )    '             删除在 '' 中内容( 要求光标在 '' 内 )

复制某区域:

可以重复的:[y]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]          y:                      表示复制操作重复操作次数:           num 表示操作重复次数操作区域选择:    h              复制光标前一个字符    l              复制光标所在处的字符    j              复制本行与下一行    k              复制本行与上一行    w              复制光标开始到下一个单词词首处    b              复制光标开始到上一个单词词首处    e              复制光标开始到这个单词的结尾处    (              复制光标开始到句子结束处    )              复制光标开始到句子开始处    {              复制光标开始到段落开始处    }              复制光标开始到段落结束处    $              复制从光标开始处到行尾处    G              复制从光标所在行到行尾处    /word          复制从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式  )    ?word          复制从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式  )    tc             复制从光标开始处到下个 c 字符处,不含 c ( c  指代任意字符 )    Tc             复制从光标开始处到上个 c 字符处,不含 c ( c  指代任意字符 )    fc             复制从光标开始处到下个 c 字符处,含 c ( c  指代任意字符 )    Fc             复制从光标开始处到上个 c 字符处,含 c ( c  指代任意字符 )    `c             复制从光标开始到标记 c 这个位置不可重复的:[y]+[ 0 / ^ / H / L]y:                     表示复制操作操作区域选择:    0             复制从光标所在处到某一行的开始位置    ^             复制到某一行的第一个字符位置(不包括空格或TAB字符)    L             复制直到屏幕上最后一行的内容    H             复制直到屏幕上第一行的内容[y]+[i]+[ { / } / ( / ) / " / ' ]y:                     表示复制操作i:                     表示 in 即在里面的意思操作区域选择:    {             复制在 {} 中内容( 要求光标在 {} 内 )    }             复制在 {} 中内容( 要求光标在 {} 内 )    [             复制在 [] 中内容( 要求光标在 [] 内 )    ]             复制在 [] 中内容( 要求光标在 [] 内 )    (             复制在 () 中内容( 要求光标在 {} 内 )    )             复制在 () 中内容( 要求光标在 () 内 )    "             复制在 "" 中内容( 要求光标在 "" 内 )    '             复制在 '' 中内容( 要求光标在 '' 内 

高亮显示

/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的列模式对标记文本模式中区域选择aw             选中一个单词,含单词后的空格as             选中一个句子,含句号后的空格ap             选中一个段落,含段落后的空格ab             选中()括号中的所有内容,含()aB             选中{}括号中的所有内容,含{}            iw             选中一个单词,不含单词后的空格is             选中一个句子,不含句号后的空格ip             选中一个段落,不含段落后的空格ib             选中()括号中的内容,不含()iB             选中{}括号中的内容,不含{}除此之外还有上面光标移动的方法,但是要除去组合键,如:[ctrl]+[p]移动标记文本模式中光标位置o             光标在选择区域中的对角线之间的跳转O             光标在选择区域中的横纵之间的跳转当在 V 与 [ctrl]+[v] 模式中我们除了 o,O 来移动光标位置外,还可以通过移动光标位置中一些方法来移动光标位置(不是所有而是其中一些)对标记文本模式中数据操作~             将选中块中的内容大小写翻转u             将选中块中的内容转成小写U             将选中块中的内容转成大写y             复制选中块中的内容d/D/x/X             删除选中块中的内容

窗口操作

: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]+[-]              缩小所在窗口对所有窗口执行命令:qall                    退出所有窗口,但是如果你有一个窗口发生改写但未保存 vim 是不会退出的:wall                    保存所有修改过的窗口:wqall                   保存所有修改过的窗口并关闭,然后退出 vim:qall!                   强制退出所有窗口,然后退出 vim

多档案编辑

:n      编辑下一个档案:N      编辑上一个档案:files      列出目前这个 vim 的开启的所有档案

执行 shell 命令

: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   表示从当前行到接下来的第几行,表示范围**************************************************************