我自己是Vim的重度用户,因为我喜欢那种双手不离开键盘就能掌控一切的感觉。Vim可以使我对文本的操作更加精确和高效。对于没用过Vim的朋友来说,可能体会不到这种感觉。由于使用Vim是有一定的学习成本的,只有非常熟练才能感受到它带来的捷径。这里我将我每天用到的Vim命令做一个总结,共分为21点。建议想学Vim的同学可以关注文章,多用搜索引擎试试。相信你会逐渐喜欢上Vim。这篇文章比较偏向于有一定基础的同学,因为内容很多,如果写的太详细,会显得相当冗长。1、Vim模式普通模式(按Esc或Ctrl+[进入)左下角显示文件名或为空插入模式(按i进入)左下角显示--INSERT--可视模式(按v进入enter)左下角显示--VISUAL--2。Openfile#打开单个文件vimfile#同时打开多个文件vimfile1file2..#在vim窗口中打开一个新文件:open[file][例如]#当前打开1.txt,做了一些编辑但没有保存:打开!放弃这些修改,重新打开未修改的文件#当前打开1.txt,进行一些编辑并保存:打开2.txt直接退出1.txt的编辑,直接打开2.txt编辑,保存退出:wq然后重新-vim2.txtsteps#打开远程文件,比如ftp或者sharefolder:eftp://192.168.10.76/abc.txt:e\qadrive\test\1.txt#以只读方式打开文件,但是你仍然可以使用:wq!towritetovim-Rfile#强制关闭修改功能,不能使用:wq!写入vim-Mfile3,插入命令i在当前位置插入I在当前行首插入a在当前位置后插入A在当前行末插入o在当前行后插入一行OInsert当前行前一行Next,按N键查找上一行。?text 搜索文字,反向搜索,按n查找下一篇,按N查找上一篇。vim中有一些特殊字符在查找 时需要进行转义。*[]^%/?~$:setignorecase ignorecaselookup:setnoignorecase doesnotignorecaselookupquicklookup,不用手动输入字符就可以搜索*向后(向下)查找光标所在的词#向前(向上)查找光标所在的词匹配词查找如果文中有这三个词helloheloworldhellopython,然后我使用/hello,所有三个词都会匹配。有没有办法实现精准搜索?可以使用/hello\>精确搜索:匹配行首,行尾#hello在行首/^hello#world在行尾/world$5,替换命令~反转光标字母大小写r将当前字符替换为all写入字母R...连续替换字母cc替换整行(即删除当前行插入到下一行)cw替换一个单词(即删除一个单词,进入插入模式),前提是光标在单词的第一个字母(可以用b定位)C(大写C)替换为行尾(与D不同,D被删除(切)到行尾,C被删除到行位置,进入插入模式):s/old/new/Replacenewwithold,替换原来的当前行的第一个匹配项:s/old/new/g将新的替换为旧的,替换当前行的所有匹配项:%s/old/new/将新的替换为旧的,替换所有的第一个匹配项lines:%s/old/new/gnew换old,替换整个文件的所有匹配项:10,20s/^//g在第10行到第20行的每一行前加四个空格,用于缩进.ddp将光标下的行与其正下方的行交换。6、撤消和重做u撤消(Undo)U撤消对整行的操作Ctrl+r重做(Redo),即撤消的撤消。7.删除命令需要说明的是vim没有简单的删除命令。你理解为切割更准确。以字符为单位删除x删除当前字符3x删除当前字符3次X删除当前字符之前的字符。3X删除当前光标前三个字符dl删除当前字符,dl=xdh删除前一个字符,X=dhD删除当前字符至行尾。d=d$d$删除当前字符至行尾d^删除当前字符前至行首deletedw删除当前字符至词尾daw删除当前字符所在的词locateddeletedd删除当前行dj删除下一行dk删除上一行dgg删除当前行至文件开头d1G删除当前行至文件开头dG删除当前行至文件结尾documentkdgg删除当前行之前的所有行(不包括当前行)jdG删除当前行之后的所有行(不包括当前行)line)10d删除从当前行开始的10行。:1,10d删除1-10行:11,$??d删除11行及所有后续行:1,$d删除所有行J 删除两行之间的空行,实际上合并两行。8、普通模式复制粘贴,用y复制yy复制光标所在的整行(3yy表示复制3行)y^复制到行首,或者y0。不包括光标所在的字符。y$复制到行尾。包含光标所在的字符。yw复制一个词。y2w复制两个单词。yG复制到文本末尾。y1G复制到文本的开头。普通模式下,使用p粘贴p(小写):表示粘贴到光标后(右下)P(大写):表示粘贴到光标前(上,左)9.剪切粘贴dd实际上是一个剪切命令,cutThecurrentlineddp将当前行剪切并粘贴,这样就可以交换当前行和下一行的位置。在普通模式下,按v(verbatim)或V(linebyline)进入可视模式,然后用jklh命令移动选中部分行或字符,然后按d剪切ndd在当前行后剪切n行线。使用p命令粘贴剪切内容:1,10dcutlines1-10。使用p命令粘贴剪切的内容。:1,10m20将第1-10行移动到第20行之后。10.退出并保存:wq保存并退出ZZ保存并退出:q!强制退出并忽略所有更改:e!放弃所有修改并打开原始文件。ZZ保存退出:sav(eas)new.txt另存为新文件,不保存退出对原文件的编辑:f(ile)new.txt打开一个新文件,不保存,退出对原文件的编辑,11、移动命令以字符h为单位移动,向左一个字符l,向右一个字符k,向上一个字符j,向下一个字符#【定位字符】f和ffx查找光标后的第一个字符x3fd查找第三个光标在d后的字符F同f,反向查找。以行为单位移动#10指所有数字,可以任意指定10h向左移动10个字符10l向右移动10个字符10k向上移动10行10j向下移动10行$移动到行尾3$移动到下3lines尾部以单词为单位移动w向前移动一个单词(光标停在单词的开头)b向后移动一个单词e,同w,只是光标停在单词的末尾ge是同b,光标停在词尾。以句子为单位移动(移动到句子的开头)移动到句子的结尾跳转到文件的开头和结尾gg移动到文件的开头。=[[==``G移动到文件末尾。=]]其他移动方法^移动到本行第一个非空白字符。0移动到该行的第一个字符(可以是空格),使用命名标记跳转。个人感觉这个很好用,因为可以跨文件。使用ma,可以把这个地方标记为a,使用'a跳转,使用:marks查看所有标记使用:delm!您可以删除所有标记。查看错误日志时,正常的做法是用vim打开文件,然后用shift+g跳到最后一行。这里有一个更简单的操作,可以在打开文件时立即跳转到最后一行。.只需在vim和文件之间添加一个+。vim+you.log打个比方,当你想打开文件并立即跳转到指定行时,可以这样做#打开文件并跳转到第20行vimyou.log+20当你使用/搜索定位时jumporuse:linenumber在执行精确跳转的时候,有时候我们想回到之前的位置,如何实现呢?只需使用Ctrl+o返回上一个位置。12、排版功能缩进:设置shiftwidth?查看缩进值:setshiftwidth=4设置缩进值为4#Indentation相关最好写在配置文件里~/.vimrc:settabstop=4:setsofttabstop=4:setshiftwidth=4:setexpandtab>>Indentright<不需要同时按下Ctrl-wh切换到左侧窗口Ctrl-wl切换到右窗口Ctrl-wj切换到下窗口Ctrl-wk切换到上窗口#特别说明:全屏模式下:n切换到下一个窗口:N切换到上一个窗口:bp切换到上一个窗口#特别说明:非全屏模式:bn切换到下一个窗口Window,当前位置窗口内容改变,其他窗口不变:bN切换到上一个窗口,当前位置窗口内容位置改变,其他窗口不变。同时按Ctrl-wJ将当前窗口移到底部Ctrl-wK将当前窗口移到顶部Ctrl-wH将当前窗口移到左侧Ctrl-wL将当前窗口移到右侧Ctrl-ww依次切换窗口调整大小#友情提示:切记不要在中文状态下使用键盘Ctrl-w+增加窗口高度Ctrl-w-减少窗口高度退出窗口:close关闭当前窗口:close!强制关闭当前窗口:q不保存退出:q!强制退出而不保存:x保存并退出:wq保存并退出:wq!强制保存并退出:w<[path/]filename>另存为:savesa<[path/]filename>另存为ZZ保存并退出。:only关闭所有窗口,只保留当前窗口(前提:其他窗口内容有变化时保存):only!关闭所有窗口,只保留当前窗口所有并退出。17、文件加密vim-xfile_name然后输入密码:确认密码:如果不修改内容,必须保存。:wq,否则密码设置不会生效。18、录制宏,按q键添加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不能嵌套)。使用@时,加上宏名,如qa。..q记录了一个名为a的宏,@a使用了这个宏。19.执行命令#重复前面的命令。#执行shell命令:!command#例如列出当前目录下的文件:!ls#执行脚本:!perl-cscript.pl检查perl脚本的语法,不需要退出vim,很方便。:!perlscript.pl在不退出vim的情况下执行perl脚本,非常方便。:suspend或Ctrl-Z暂停vim,返回shell,按fg返回vim。20、Unix/Linux系统帮助命令$vimtutor#普通模式下,键盘输入vim或F1#命令行模式下:help显示全部帮助:helpxxx显示xxx的帮助,如:helpi,:helpCTRL-[(即Ctrl+[寻求帮助)。:help'number'Vim选项的帮助用单引号括起来在Windows系统上:helptutor21,配置命令显示当前设置:set或:se显示所有修改的配置:setall显示所有设置:setoption?显示option的设置值:setnooption取消当前设置值:ver显示vim的所有信息(包括版本和参数等)#需要注意:全屏模式下:args查看当前打开的文件列表,当前正在编辑的文件将包含在[]中更改设置:设置nu显示行号设置autoindent(ai)设置自动缩进设置autowrite(aw)设置自动存档,设置备份(bk)设置自动备份,设置不打开方式默认背景=深色或浅色,设置背景风格setcindent(cin)设置C语言风格缩进:setts=4设置tab键转换为4个空格:setff=unix#修改文件dos文件为unix:setshiftwidth?ViewIndentation值:setshiftwidth=4设置缩进值4:setignorecase 忽略大小写搜索:setnoignorecase 不忽略大小写搜索:setpaste#在插入模式下,粘贴格式不会乱掉落:设置尺子? 检查标尺是否设置。在.vimrc中,使用set命令设置的选项可以通过以下命令查看:scriptnames 查看vim脚本文件的位置,如.vimrc文件、语法文件和插件等。:setlist显示非-打印制表符、空格、行尾等字符,如果无法显示制表符,请务必使用setlcs=tab:>-command设置.vimrc文件,并确保有文件中的选项卡。如果启用了expendtab,则选项卡将扩展为空格。:syntax列出定义的语法项:syntaxclear清除定义的语法规则:syntaxcasematch区分大小写,int和Int将被视为不同的语法元素:syntaxcaseignoreCase-independent,int和Int将被视为相同语法元素,并使用相同的配色方案以上是我使用Vim的一些总结,希望对你有所帮助。