欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Linux中VIM的使用 有大用

Vim 官网:http://www.vim.org/

参考:https://wenku.baidu.com/view/21c5f387d4d8d15abe234ecb.html

参考:https://www.douban.com/group/topic/1815089/

参考:http://www.tuicool.com/articles/rq6ryqi

参考:http://darksun.blog.51cto.com/3874064/1548082/

VIM 使用技巧 PDF 下载:http://download.csdn.net/download/freeking101/9882394

史上最全Vim快捷键键位图(入门到进阶)https://www.linuxidc.com/Linux/2016-06/132019.htm




vim键位图如果网页图片看不清,可以 “右键->在新标签页中打开图片” 查看


英文版(基础版) 



简体中文版(基础版)



程序员定制版

https://blog.csdn.net/zhlh_xt/article/details/52458672




个性化配置


vim是什么?

所有的Linux/UNIX都会默认安装Vi,现在主流的linux都会给默认安装vim。vim是Vi IMproved,是编辑器Vi的一个加强版。Vim/Vi是一个功能强大的全屏幕文本编辑器, 是Linux/UNIX上最常用的文本编辑器, 它的作用是建立、编辑、显示文本文件;Vi几乎支持所有的语言。Vim/Vi 没有菜单,只有命令。 如果你是一名职业的SE,那么一定在寻找一款出色的能够自由定制、满足灵活编辑功能的编辑器。那么答案,就是vim或者Emacs。本文介绍vim编辑器。至于另一款强大的编辑器Emacs,以后有时间在整理学习。。。。


配置文件在哪?

Windows系统的配置文件是vim安装目录下的vimrc文件。
Linux系统,RHEL和CentOS的配置文件是/etc/vimrc,Debian和Ubuntu的配置文件是/usr/share/vim/vimrc。
Mac OS X的配置文件是/usr/share/vim/vimrc。



vimRC中的RC是什么意思?

一般在运行某个软件、环境或工具之初,要初始执行的一些命令,称为Run Commands,即RC。根据Wikipedia.org的记载,RC缩写的用法源自MIT的相容分时操作系统(Compatible Time-Sharing System,CTSS)[参考1]。所以以后如果你看到了SystemRC或者ScreenRC,也就知其缘由了。


三种基本模式

在《大家来学vim》中提到vim有6+5种模式,除了细分程度不同外,实际上常用的只有3种模式:Normal Mode、Insert Mode和Command-line Mode。从Normal Mode进入Insert Mode,可以按i、I、a、A、o、O、r、R即可。其中i和I表示插入(Insert),r和R表示替换(replace)。从Insert Mode进入Normal Mode,只需要按ESC键即可。从Normal Mode进入Command-line Mode,可以按“:”、“/”、“?”。其中“:”表示输入vim命令,“/”表示后面输入要向下搜索的字符串,“?”表示后面输入要向上搜索字符串。从Command-line Mode进入Normal Mode,只需要按ESC键即可了。可以把Normal Mode理解为常态,进入其他任何一种模式,需要某种特殊方式,而从其他特殊模式回到Normal Mode,就按ESC键即可。

Vim/Vi工作模式



vim中那些最最常用的配置


(1)颜色设置

[plain] view plain copy
  1. syntax on       "开启代码高亮  

  2. syntax off      "关闭代码高亮  

  3. syntax enable   "开启代码高亮  

(2)搜索设置

[plain] view plain copy
  1. set hlsearch    "开启搜索高亮     

  2. set nohlsearch  "关闭搜索高亮     // 或者 命令模式下输入:nohlsearch (nohlsearch是 no highlight search缩写)可以简写 noh 或者set noh  

  3. set incsearch   "输入搜索字符串的同时进行搜索  

  4. set ignorecase  "搜索时忽略大小写  

可以使用如下方式来实现快速查找:

  1. 最快的方式是让光标停留在想要查找的单词的任意一个字母上面, 然后输入Shift + * ,即可快速选中该单词,并且可以通过 n 或 N 进行上一个或下一个的匹配。

  2. 让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /”0),回车, 就查找到了第一个匹配的单词, 并且可以通过 n 或 N 进行上一个或下一个的匹配。
    解释一下:
    Ctrl + r 是指使用寄存器 , 你会发现先输入/ , 然后输入 Ctrl + r , 会立刻变为 “ , 即寄存器的前缀, 然后 ”0 就可以理解了吧? 合起来就是 /“0, 就是查找刚才复制的那个单词, 不懂的请查看上一个帖子:
    vim的复制粘贴(系统剪切板 剪贴板):http://blog.csdn.net/hk2291976/article/details/42196559
    vim之寄存器的使用和配置:http://blog.csdn.net/ballack_linux/article/details/53078836

  3. 还有一种方式, 和第二种方式差不多,不过是将单词拷贝到系统剪贴板, 然后再从系统剪贴板拿出来。 即选中需要查找的单词, 然后输入 “+y, 然后输入/(Shfit + Ctrl + v), 就查找到了第一个匹配的单词, 并且可以通过 n 或 N 进行上一个或下一个的匹配。

(3)用户界面

[plain] view plain copy
  1. set showmode        "开启模式显示  

  2. set ruler           "开启光标位置提示  

  3. set number          "显示行号  

  4. set nonu            "不显示行号  

  5. set cursorline      "强调光标所在行  

  6. set cmdheight=1 "命令部分高度为1  

(4)编辑辅助配置

[plain] view plain copy
  1. set autoindent      "自动缩进  

  2. set noautoindent    "不自动缩进  

  3. set smartindent     "智能缩进  

  4. set autoread        "当文件在外部被改变时,vim自动更新载入  

  5. set showmatch       "显示匹配的括号  

(5)set 命令 和 set 的一些选项

[plain] view plain copy
  1. set命令  

  2.     :set ic  搜寻时忽略大小写 (ic:ignore case)  

  3.     :set noic  搜寻时不忽略大小写  

  4.     :set number   显示行号  

  5.     :set nonumber   不显示行号   

  6.   

  7. set 的一些选项  

  8.     all:列出所有选项设置情况  

  9.     term:设置终端类型  

  10.     ignorance:在搜索中忽略大小写  

  11.     list:显示制表位(Ctrl+I)和行尾标志($)  

  12.     number:显示行号  

  13.     report:显示由面向行的命令修改过的数目  

  14.     terse:显示简短的警告信息  

  15.     warn:在转到别的文件时若没保存当前文件则显示NO write信息  

  16.     nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符  

  17.     nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始  

  18.     mesg:允许vi显示其他用户用write写到自己终端上的信息  

参考:

[1]Run Commands,http://en.wikipedia.org/wiki/Run_commands
[2]The Ultimate vim Configuration(vimRC),http://amix.dk/blog/post/19486



Vim同时打开并切换多个文件

1、用vim打开一个文件,例如:original.trace

2、在普通模式下,输入:":sp"(不含引号)横向切分一个窗口,或者":vsp"纵向切分一个窗口,敲入命令后,你将看到两个窗口打开的是同一个文件

3、在普通模式下,输入:":e new.trace",在其中一个窗口里打开另一个文件

4、在 普通模式下ctrl+w,再按一下w,可以在两个窗口之间切换

Vim跨文件复制
现在把a.txt的三行复制到b.txt
1、用vim打开a.txt
# vim a.txt
Esc进入指令模式(默认刚打开就是这个模式)
输入"a3yy
解释:引号要结合shift输入,a代表剪贴板a(26个英文字母都可以),3yy当然代表从当前行复制3行了
退出a.txt
:q
2、打开b.txt
光标移动到你想要复制的位置
进入指令模式,输入"ap
解释:引号要结合shift输入,a代表使用剪贴板a,p当然代表粘贴了

Vim复制到系统剪贴板
1.首先查看vim --version |grep clipboard中 clipboard选项是否开启
2.ubuntu中通过下载vim-gnome可以开启系统剪贴板 sudo apt-get install vim-gnome
3.复制粘贴通过 "+y  和 "+p 实现 (在一般模式下按v进入visual模式G全选后复制


怎样在vim的命令行中拷贝,粘贴?

在vim的普通模式下,输入':'进入命令行模式,我们可以在屏幕下方输入我们想让vim执行的命令。有时候,我们需要在命令行中执行拷贝粘贴,

例如:我们想要查找替换正文中的特殊字符,但我们又不知道怎么在命令行中输入这个特殊字符。查找还好说,不一定非要在命令行中输入这个特殊字符,只要把光标放在这个特殊字符上,按'*'向下查找,按'#'向上查找。但是如果我们要替换这个特殊字符,就必须在命令行中输入它了,但是又不知道怎么输入这个特殊字符,怎么办?
答案是拷贝粘贴,先在正文中复制这个字符,然后粘贴在命令行中。

可是怎么在命令行中实现粘贴呢?别急,介绍一个好东西:命令行窗口。在正常模式下,输入'q:',就打开了命令行窗口。命令行窗口中都是我们输入过的命令,在这个窗口中我们可以像编辑正文一样编辑新的命令,或修改旧的命令。因为像编辑普通缓冲区一样,自然可以拷贝粘贴了。编辑完之后,在想要执行的命令上按回车,就ok了。命令执行后,命令行窗口也自动关闭了。


常用快捷键

[plain] view plain copy
  1. 进入vi的命令  

  2.     vi filename :          打开或新建文件,并将光标置于第一行首  

  3.     vi +n filename :      打开文件,并将光标置于第n行首  

  4.     vi + filename :       打开文件,并将光标置于最后一行首  

  5.     vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处  

  6.     vi -r filename :      在上次正用vi编辑时发生系统崩溃,恢复filename  

  7.     vi filename....filename :打开多个文件,依次进行编辑  

  8.   

  9.   

  10. 可视模式(选择文本):------------  vim 中选中指定字符,进行复制/剪切/粘贴  

  11.     进入vim中visual模式,visual模式进入,可以有三种方式:     

  12.     (1)在普通模式(normal)下,直接按键 v  就可以进入默认visual模式,可以使用v+j/k/h/l 进行文本选择    

  13.   

  14.     v(小写字母v): 按字符移动,选中文本  

  15.     V(大写字母V): 选择一行,按行移动,选中文本可视模式可以配合 d, y, >>, << 实现对文本块的删除,复制,左右移动  

  16.     ctrl+v      : 按下^v后即可进行矩形的选择了(ctrl + 小写字母v)   

  17.         在块模式下,可以进行多列的同时修改,修改方法是:  

  18.         首先进入块模式 Ctrl+ v,使用按键j/k/h/l进行选中多列。  

  19.         按键Shift + i 进行 块模式下的插入,输入字符之后,按键ESC,完成多行的插入。  

  20.   

  21.     对于选中的文本进行如下按键:  

  22.     d:剪切操作  

  23.     y:复制操作  

  24.     p:粘贴操作  

  25.     ^:选中当前行,光标位置到行首(或者使用键盘的HOME键)  

  26.     $:选中当前行,光标位置到行尾(或者使用键盘的END键)  

  27.   

  28.     :join    合并多行  

  29.     J        合并两行  

  30.   

  31.   

  32. Vim 的分屏操作(:split 文件名   同时在一个页面显示多个文件的内容,类似多窗口,用切换当前窗口。 多窗口是split,像用e打开多个文件是将文件放在缓冲区中)  

  33.     sp:  上下分屏,后可跟文件名。    :sp 001.txt  

  34.     vsp: 左右分屏,后可跟文件名      :vsp 001.txt  

  35.     Ctr+w+w:在多个窗口切换  

  36.     wqall:保存退出关闭所有。     

  37.     qall:退出所有  

  38.    

  39.     启动分屏:  

  40.             1.使用大写O参数进行垂直分屏  vim -On file1 file2 ...  

  41.             2.使用小写o参数进行水平分屏  vim -on file1 file2 ...  

  42.             注: n是数字,表示分屏的数量,n要大于等于文件个数  

  43.     关闭分屏  

  44.             1.关闭当前窗口 ctrl+w c (同时按下ctrl和w,松开按下c)      关闭分割窗口可以用:close,剩下只有一个窗口的话就不能关了。  

  45.             2.关闭当前窗口,如果只剩最后一个,则退出vim。ctrl+w q  

  46.     编辑中分屏  

  47.             1.上下分割当前打开的文件              ctrl+w s  

  48.             2.上下分割,并打开一个新的文件        :sp filename  

  49.             3.左右分割当前打开的文件              ctrl+w v  

  50.             4.左右分割,并打开一个新的文件        :vsp filename  

  51.     分屏编辑中光标的移动  

  52.             vi中的光标键是h,j,k,l,要在各个屏之间切换,只需要先按一下ctrl+w  

  53.             1.把光标移动到上边的屏         ctrl+w k  

  54.             2.把光标移动到下边的屏         ctrl+w j  

  55.             3.把光标移动到右边的屏         ctrl+w l  

  56.             4.把光标移动到左边的屏         ctrl+w h  

  57.             5.把光标移动到下一个的屏       ctrl+w w  

  58.     移动分屏  

  59.             1. 当前分屏向上移动         ctrl+w K  

  60.             2. 当前分屏向下移动         ctrl+w J  

  61.             3. 当前分屏向右移动         ctrl+w L  

  62.             4. 当前分屏向左移动         ctrl+w H  

  63.     屏幕尺寸  

  64.             1.增加高度                 ctrl+w +  

  65.             2.减少高度                 ctrl+w -  

  66.             3.让所有屏的高度一致       ctrl+w =  

  67.             4.左加宽度                 ctrl+w >  

  68.             5.右加宽度                 ctrl+w <  

  69.             6.右增加n宽 (如:n=30)     ctrl+w n <  

  70.   

  71. Normal Mode -> Insert Mode  

  72.     (i=insert、a=append、r=replace、o=open)。  

  73.     i    小写字母i,在  光标前  插入  

  74.     a    小写字母a,在  光标后  附加文本  

  75.     I    大写字母I,在  本行行首  插入文本。在光标所在行的第一个非空格处插入  

  76.     A    大写字母A,在  本行行尾  附加文本  

  77.     o    小写字母o,在光标所在行的  下一行  处插入新行  

  78.     O    大写字母O,在光标所在行的  上一行  处插入新行  

  79.     r    小写字母r,替换光标所在处的字符一次  

  80.     R    大写字母R,持续替换光标所在处的字符,直到按下ESC  

  81.   

  82. Normal Mode -> Command-line Mode  

  83.     :w                     保存文件  

  84.     :w <filename>          另存为名为filename文件  

  85.     :w! filename           强制保存到指定文件,文件存在则覆盖  

  86.     :wq! filename          强制保存到指定文件,文件存在则覆盖,并退出  

  87.     :n1,n2 w <filename>    将n1行到n2行的数据另存为名为filename文件  

  88.     :w!                    强制保存文件(前提是用户有修改文件访问权限的权限)  

  89.     :q                     退出缓冲区,即退出vi,如果文件修改但没有保存,会提示无法退出  

  90.     :q!                    不保存文件,直接退出 。  

  91.     :wq!                   保存并强制退出  

  92.     :wq    保存退出。:x如果文件有更改,则保存后退出,否则直接退出。ZZ (Normal 模式下 ZZ)同 :wq  

  93.     :wq!                   强制保存文件并退出缓冲区(前提是用户有修改文件访问权限的权限)  

  94.   

  95.     :e filename         打开文件filename进行编辑  

  96.     :x                  保存当前文件并退出  

  97.     :!command           执行shell命令command(也就是在VIM里面执行shell命令)  

  98.     :n1,n2 w!command    将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入  

  99.     :r!command          将命令command的输出结果放到当前行  

  100.     :r 文件名           在光标所在处插入一个文件的内容。(read)  

  101.     :r /etc/passwd      在打开的文件中,在光标所在处读入/etc/passwd内容  

  102.     :3r /etc/passwd     在打开文件的第3行开始读入 /etc/passwd的所有内容。  

  103.     :35 r 文件名   将文件插入至 35 行之后。  

  104.   

  105.     打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,需要将所做修改存入临时文件。  

  106.     vi file  

  107.     :w /tmp/1   

  108.   

  109.     把第20~59行之间的内容存盘成文件/tmp/1,我们可以键入如下命令。  

  110.     vi file  

  111.     :20,59w /tmp/1  

  112.   

  113. Insert Mode -> Normal Mode 和 Command-line -> Normal Mode  

  114.     按下ESC键  

  115.   

  116.   

  117. 常用光标移动按键(在 vi 中, 移动光标 和 编辑 是 两件事, 正因为区分开来, 所以可以很方便的进行光标定位和编辑.)  

  118.   

  119.     Ctrl+o     回到光标的上一位置  

  120.   

  121.     光标字符操作  

  122.         h、j、k、l:左、下、上、右 的移动光标命令。虽然您可以在Linux中使用键盘右边的4个光标键,  

  123.                    但是记住这4个命令还是非常有用的。这4个键正是右手在键盘上放置的基本位置。  

  124.         $          光标移动到行尾(End),注意要按Shift键  

  125.         0          (注意是数字零)光标移至当前行首(Home)  

  126.         ^          光标移动到行首第一个非空白字符(Home),注意要按Shift键  

  127.         space      光标右移一个字符  

  128.         Backspace  光标左移一个字符  

  129.         Enter      光标下移一行  

  130.   

  131.         ''     此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查  

  132.                找到某个单词后, 再输入此命令则回到上次停留的位置.  

  133.         '.     此命令相当好使, 它移动光标到上一次的修改行.  

  134.         `.     此命令相当强大, 它移动光标到上一次的修改点.  

  135.       

  136.       

  137.     光标词操作  

  138.         w或W       光标右移一个字至字首  

  139.         b或B       光标左移一个字至字首  

  140.         e或E       光标右移一个字至字尾  

  141.   

  142.   

  143.     光标句操作、段操作、行操作  

  144.         )          光标移动到后一句的句首  

  145.         (          光标移动到前一句的句首  

  146.         }          光标移动到下一段的段首  

  147.         {          光标移动到上一段的段首  

  148.         nG         定位到 第 n 行首  (G 是goto 的意思)  

  149.         :n         定位到 第 n 行  

  150.         gg         移动到文件第一行行首  

  151.         G          移动到文件最后一行。  

  152.         Ctrl+G     光标所在位置的行数和列数报告  

  153.         数字n      光标 向下 移动 n 行。例如:正常模式下,按下数字5,然后回车,代表向下移动5行。  

  154.   

  155.         n+         光标下移n行,例如10+。    

  156.         n-         光标上移n行,例如5-。   

  157.         n$         光标移至第n行尾  

  158.       

  159.       

  160.     光标页操作。屏幕翻滚类命令  

  161.         Ctrl+f     向下翻页(Pagedown)  

  162.         Ctrl+b     向上翻页(Pageup)  

  163.         Ctrl+d     向下翻半页  

  164.         Ctrl+u     向上翻半页  

  165.         nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。  

  166.         H          光标移至屏幕顶行(Head)  

  167.         M          光标移至屏幕中间行(Middle)  

  168.         L          光标移至屏幕最后行(Last)  

  169.   

  170.   

  171.   

  172. 常用编辑快捷键  

  173.     :n1,n2 co n3      将n1行到n2行之间的内容“拷贝”到第n3行下  

  174.     :.,5 copy 10      把从当前行开始直至后序第5行的内容“复制”到第10行之后  

  175.     :6,$ co 2         把从第6行开始至文件尾的内容“复制”到第2行之后  

  176.     :n1,n2 m n3       将n1行到n2行之间的内容“移至”到第n3行下  

  177.     :1,5 move 12      把第1行到第5行的内同“移动”到第12行之后  

  178.     :n1,n2 d          将n1行到n2行之间的内容删除  

  179.     :1,5 delete       删除第1行到第5行内容  

  180.       

  181.       

  182.     [n]s        从当前光标位置处开始,以输入的文本替代指定数目的字符。加上n代表替换n个  

  183.     S           删除光标所在行。即清空光标所在行。按esc 键结束  

  184.     C           替换光标位置开始直至行尾的所有数据内容。清空光标所在位置到行尾内容。  

  185.     ncw或nCW    修改指定数目的字  

  186.     nCC         修改指定数目的行  

  187.     [n]cc       删除整行,但是删除的行不会消失,而是变为空,然后可以修改整行的内容。  

  188.     cw:删除一个单词并进入插入模式,      cc:删除一行并进入插入模式。  

  189.       

  190.       

  191.     Ctrl+u      删除输入方式下所输入的文本  

  192.     J           把下一行合并到当前行尾   

  193.     v(view)->选中内容->d:先在命令模式下按v,再使用方向键选择内容,然后按d删除选中的内容  

  194.       

  195.     "?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字  

  196.     "?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字  

  197.     "?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字  

  198.     "?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字  

  199.     ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存  

  200.   

  201.     同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中。  

  202.     vi file1 file2  

  203.     yy 在 文件1 的光标处拷贝所在行  

  204.     :n 切换到下一个文件 (n=next)  

  205.     p 在 文件2 的光标所在处粘贴所拷贝的行  

  206.     :N 切换回上一个文件  

  207.   

  208.   

  209. 删除操作(delete)  

  210.     dd     删除光标所在行。  

  211.     ndd    删除从光标所在行开始,向下的n行  

  212.     d1G    删除从光标所在行开始,到第一行的所有行  

  213.     dG     删除光标所在开始到文件尾的所有字符  

  214.     d$     删除从光标所在位置,到行尾的所有字符  

  215.     d0     删除从光标所在位置,到行首的所有字符d0 删除到某一行的开始位置   

  216.     d^     删除到某一行的第一个字符位置(不包括空格或TAB字符)   

  217.     D      以行为单位,删除包括光标在内及其后面的所有字符。即 删除 至 行尾     

  218.     dw     删除到某个单词的结尾位置   

  219.     d3w    删除到第三个单词的结尾位置     或者  ndw或ndW  删除光标处开始及其后的n-1个字  

  220.     db     删除该行光标前字符(delete begin)。       

  221.     de     删除自光标开始后面的字符(delete end)  

  222.           

  223.     cw、dw    改变(置换)/删除光标所在处的单词(或者字) (c=change、d=delete)。  

  224.     nx        向后删除n个字符。nX 是向前删除n个字符  

  225.     x或X      删除一个字符。x(相当于delete)删除光标后的,而X(相当于backspace)删除光标前的  

  226.       

  227.     dW    删除到某个以空格作为分隔符的单词的结尾位置   

  228.     dB    删除到某个以空格作为分隔符的单词的开始位置   

  229.     d7B   删除到前面7个以空格作为分隔符的单词的开始位置   

  230.     d)   删除到某个语句的结尾位置   

  231.     d4)  删除到第四个语句的结尾位置   

  232.     d(   删除到某个语句的开始位置   

  233.     d)   删除到某个段落的结尾位置   

  234.     d{    删除到某个段落的开始位置   

  235.     d7{   删除到当前段落起始位置之前的第7个段落位置   

  236.     dd    删除当前行   

  237.     d/text 删除从文本中出现“text”中所指定字样的位置, 一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容   

  238.     dfc    删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容   

  239.     dtc    删除当前行直到下一个字符“c”所出现位置之间的内容   

  240.   

  241.     dL 删除直到屏幕上最后一行的内容   

  242.     dH 删除直到屏幕上第一行的内容   

  243.     dG 删除直到工作缓存区结尾的内容   

  244.     d1G 删除直到工作缓存区开始的内容   

  245.   

  246.   

  247.     将光标移到需要删除的行处按Ctrl+G显示行号,再到结尾处Ctrl+G显示结尾的行号。假设2次得到的行号为20和100,则把这期间的内容全删除  

  248.     :20,100d  删除从20行到100行的内容  

  249.     也可以在要删除的开始行和结束行中用ma、mb命令标记,然后用下面命令删除。  

  250.     :a,bd  

  251.   

  252.   

  253. 复制操作(yank)   

  254.     yy 或者 Y      复制光标所在行。拷贝一行到剪贴板中  

  255.     nyy 或者 nY    复制从光标所在行开始向下的n行。拷贝n行到剪切板中  

  256.     y1G    复制从光标所在行开始,到第一行的所有行  

  257.     yG     复制从光标所在行开始,到最后一行的所有行  

  258.     y$     复制从光标所在位置,到行尾的所有字符  

  259.     y0     复制从光标所在位置,到行首的所有字符    

  260.     yw     拷贝一个单词。如果要复制整行的最简单办法就是V,y,p 就行了    

  261.     yfa              表示拷贝从当前光标到光标后面的第一个a字符之间的内容.  

  262.     dfa              表示删除从当前光标到光标后面的第一个a字符之间的内容.  

  263.     5fx              表示查找光标后第 5 个 x 字符.  

  264.     5w(e)            移动光标到下五个单词.  

  265.     5yy              表示拷贝光标以下 5 行.  

  266.     5dd              表示删除光标以下 5 行.  

  267.     y2fa             表示拷贝从当前光标到光标后面的第二个a字符之间的内容.  

  268.     :12,24y          表示拷贝第12行到第24行之间的内容.  

  269.     :12,y            表示拷贝第12行到光标所在行之间的内容.  

  270.     :,24y            表示拷贝光标所在行到第24行之间的内容. 删除类似.  

  271.       

  272. 粘贴操作(paste)  

  273.     p(小写):取出剪贴板中内容的命令,并在光标所在位置向下新开辟一行,粘贴  

  274.     P(大写):向当前行的上面一行粘贴      

  275.       

  276. 撤销与重做操作(undo,redo)  

  277.     u      (Undo)撤销上一个操作(也就是一步一步撤销)  

  278.     U:     撤销当前文本的全部编辑  

  279.     Ctrl+r (Redo)重做上一个操作  

  280.       

  281.   

  282. 重复操作  

  283.     .(英文的句号)       重复上一操作,就是重复上一次操作命令  

  284.   

  285.   

  286. 替换操作(replace)  

  287.     r     替换光标所在处字符  

  288.     R     进入替换模式,直至按ESC退出  

  289.     cc    替换光标所在行  

  290.     cw    替换光标所在的英文单词  

  291.     ~     转换大小写  

  292.   

  293.   

  294. 排版操作  

  295.     :le<ft>     光标所在行左对齐(left)  

  296.     :ri<ght>    光标所在行右对齐(right)  

  297.     :ce<nter>   光标所在行居中(cneter)  

  298.     gg=G        可用于代码的自动缩进排版  

  299.     [n]>>       从光标所在行开始向下[n]行文本行右移一个tab操作(编程时格式对齐有用)  

  300.     [n]<<       从光标所在行开始向下[n]行文本行左移一个tab操作(编程时格式对齐有用)  

  301.   

  302.     缩进代码  

  303.         >    行左移。可视模式(按v键后)。选中文本左移。该命令用于调整源码缩进格式简便快速。  

  304.         <    行右移。可视模式(按v键后)。选中文本右移。该命令用于调整源码缩进格式简便快速。  

  305.         v    选定后按 = 就是自动格式化代码,自动缩进,内部的递归的缩进都做到了  

  306.   

  307.     函数间跳转  

  308.         ctrl+]和ctrl+T    分别是查找函数的定义和返回, 需要ctag的支持  

  309.         i                 跳转到光标所指标识符的定义行,是打开一个新的小窗口显示,记住要加个i,最好是找自己项目下的文件,否则找库函数的话还不如man.  

  310.         大写 K            看光标所指标识符的 man 帮助页  

  311.   

  312.   

  313. TAB  

  314.     TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.  

  315.     >                    输入此命令则光标所在行向右移动一个 tab.  

  316.     5>>                  输入此命令则光标后 5 行向右移动一个 tab.  

  317.     :12,24>              此命令将12行到14行的数据都向右移动一个 tab.  

  318.     :12,24>>             此命令将12行到14行的数据都向右移动两个 tab.  

  319.     那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 没关系, vim 能  

  320.     帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.  

  321.     :set shiftwidth=4    设置自动缩进 4 个空格, 当然要设自动缩进先.  

  322.     :set sts=4           即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.  

  323.     :set tabstop=4       实际的 tab 即为 4 个空格, 而不是缺省的 8 个.  

  324.     :set expandtab       在输入 tab 后, vim 用恰当的空格来填充这个 tab.  

  325.   

  326.   

  327.   

  328. 折叠代码  

  329.     zf    进行折叠, 用zo打开折叠,也可以方向键向右打开折叠,zc 关闭折叠(只要在被折叠的块中的任一个语句就行)  

  330.   

  331.   

  332. 常用多缓冲区操作按键  

  333.   

  334.     vim下每一个打开的文件对应一个缓冲区(buffer)。  

  335.     多文件编辑会有两种情形: 一种是在进入 vim 前所用的参数就是多个文件(这种情形称为 argument list)。  

  336.                             另一种情形是进入 vim 后另外再开其它的文件(称为 buffer list)。不过都可以统称为buffer。  

  337.   

  338.     注意:  :e 或者:new 或者:split 后边可以跟目录,这样就可以在目录下慢慢找要打开的文件了  

  339.   

  340.     :n     编辑下一个文件。  

  341.     :2n    编辑下二个文件。  

  342.     :N     编辑前一个文件。注意,这种用法只能用于 argument list 的情形。  

  343.     :rew   回到首文件  

  344.     :args  查看当前编辑缓冲文件状态  

  345.     :e# 或 Ctrl-^   编辑前一个档案,用于两文件互相编辑时相当好用。  

  346.     :ls    显示缓冲区中的文件,编号后边有#的代表是前一个文件,可以通过:e#来进入,有%a的代表是当前文件,什么也没有的可以通过:bn来进入,这里的n代表文件编号。  

  347.     :b     文件名或编号   移至该文件。  

  348.     :ls    列出打开各个文件的编号,没有离开vim前编号是不会变的。这个指令 elvis 也是可以使用。当然 :e#编号 也是可以的,这样的用法则是所有 vi clone 都通用了。  

  349.     :files 或 :buffers 或 :ls   会列出目前 buffer 中的所有文件。  

  350.     在 buffers 中,减号 - 表示这个 buffer 并未载入,不过,不必担心,载入相当快速的。加号 + 表示这个 buffer 已经修改过了。  

  351.   

  352.     :b 序号(代号)     此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)就是用 :ls 命令看到的.  

  353.     :set diff         此命令用于比较两个文件, 可以用 :vsp filename命令打开另一个文件, 然后在每个文件窗口中输入此命令,就能看到效果了.  

  354.    

  355.   

  356.     1、多文件编辑模式  

  357.         (1)argument list模式,就是在打开vim编辑器时,携带多个文件路径参数。  

  358.         (2)buffer list模式,就是在进入vim编辑器后,打开多个缓冲区进行编辑。  

  359.           

  360.     2、单一缓冲区打开多个文件  

  361.         :files 显示目前打开了哪些文件  

  362.         :n 切换到下一个缓冲区内容  

  363.         :N 切换到上一个缓冲区内容  

  364.         :2n 切换到下下个缓冲区内容  

  365.         :bn 下一个缓冲区内容(buffer next)  

  366.         :bp 上一个缓冲区内容(buffer previous)  

  367.       

  368.     3、多个缓冲区打开多个文件  

  369.         :sp [filename] 打开一个新的缓冲区,如果有filename则内容为该文件,否则为当前文件  

  370.         Ctrl+w n 新建一个缓冲区  

  371.         Ctrl+w q 退出光标所在的缓冲区  

  372.         Ctrl+w j 光标移动到下一缓冲区  

  373.         Ctrl+w k 光标移动到上一缓冲区  

  374.         Ctrl+w l 光标移动到右一缓冲区  

  375.         Ctrl+w h 光标移动到左一缓冲区  

  376.         Ctrl+w v 左右切割窗口新建缓冲区  

  377.         Ctrl+w s 上下切割窗口新建缓冲区  

  378.         Ctrl+w o 使光标所在缓冲区最大化,其他缓冲区隐藏  

  379.   

  380.   

  381.     4.重新编辑  

  382.         放弃一修改过的文件,重新编辑。  

  383.         (1)使用命令 :q!强行退出后再vi flname重新进入。  

  384.         (2)使用命令 :e!强行重编辑更便捷。这样也是会打开文件,但会放弃目前编辑文件的改变,否则如果文件已有变动,vim 预设是不让您随便离开的。  

  385.                      :e! 后不接什么的话,代表舍弃一切修改,重新载入编辑中文件。  

  386.   

  387.   

  388. 常用搜索与书签操作快捷键  

  389.     1. 搜索字符串  

  390.         /string       向下 搜索字符串“string”  

  391.         ?string       向上 搜索字符串“string”  

  392.         /^字符串      查找以“字符串开始”的行  

  393.         /字符串$      查找以“字符串结尾”的行  

  394.         /a.b          查找字符串a任意字符串b  

  395.     2. 重复上次搜索  

  396.         n    根据上次搜索条件找到下一个匹配的字符串(即搜索完向下查找)。即 寻找下一个。  

  397.         N    根据上次搜索条件找到上一个匹配的字符串(即搜索完向上查找)。即 回到前一个。   

  398.     3. 搜索单词  

  399.         *     向下 搜索光标所在处的单词(完全匹配)  

  400.         #     向上 搜索光标所在处的单词(完全匹配)  

  401.         g*    向下 搜索光标所在处的单词(部分匹配)。即 匹配包含该单词的所有字符串.  

  402.         g#    向上 搜索光标所在处的单词(部分匹配)。即 匹配包含该单词的所有字符串.  

  403.         gd    查找与光标所在单词相匹配的单词, 并将光标停留在文档的非。注释段中第一次出现这个单词的地方.   %                本命令查找与光标所在处相匹配的反括号, 包括 () [] {}  

  404.         f(F)x      在光标所在行进行查找, 查找光标右(左)方第一个x字符。找到后:输入 ; 表示继续往下找输入 , 表示反方向查找  

  405.     4. 标记书签(mark)  

  406.         ma a为小写字母,为光标所在处设定文档书签a  

  407.         mA A为大写字母,为光标所在处设定全局书签A  

  408.     5. 使用书签(mark)  

  409.         `a 到文档书签a处,Tab键上方  

  410.         'a 到文档书签a所在行行首处,Enter键左边  

  411.         `A 到全局书签A处,Tab键上方  

  412.         'A 到全局书签A所在行行首处,Enter键左边  

  413.         `n 如果n=0,缓冲区将打开上一次的文档,且光标在上次编辑最后的位置,1-9以此类推  

  414.         'n 如果n=0,缓冲区将打开上一次的文档,且光标在上次编辑最后的位置所在行的行首,1-9以此类推  

  415.     6. 查看书签列表  

  416.         :marks 查看当前所有书签  

  417.   

  418.   

  419. 替换命令  

  420.   

  421.     注意: 其中s为substitute(替代、代替),%表示所有行,g表示global(总体的)。  

  422.   

  423.     :g/^/exec "s/^/".strpart(line(".")." ", 0, 4)    在行首插入行号  

  424.     :runtime! syntax/2html.vim                       转换 txt 成 html, 会按照你的颜色配置来转   

  425.       

  426.     :s/p1/p2/g        将当前行中 所有p1 均用p2替代  

  427.     :s/p1/p2/         不加g表示只把“当前行的第一个”替换  

  428.     :%s/abc/123/g     将所有行的abc替换成123  

  429.     :12,23s/aa/bb/g   将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb  

  430.     :12,23s/^/#/      将从12行到23行的行首加入 # 字符  

  431.     :%s/:.*//g        删除 文件中 从冒号开始直到行尾的所有部分。例如 文件 /etc/passwd   

  432.     :n1,n2s/p1/p2/g   将第n1至n2行中所有p1均用p2替代  

  433.     :20,30s/word1/word2/g   将从20到30行的所有word1全部替换成word2  

  434.     :1,$s/start/end/g       从第一行开始到文件最后,将字符串start替换为end  

  435.     :1,$s/word1/word2/g     或 :1,$s/word1/word2/gc (需要使用者确认)  

  436.     :g/p1/s//p2/g           将文件中所有p1均用p2替换  

  437.     :r 文件名               在当前光标位置载入另一个文件  

  438.       

  439.     :3,$s/^/some string/     在文件的第3行到最后一行所有的行首插入“some string”。  

  440.     :%s/$/some string/g      在整个文件每一行的行尾添加“some string”。  

  441.     :%s/string1/string2/g    在整个文件中替换“string1”成“string2”。  

  442.     :3,7s/string1/string2/   仅替换文件中的第3行到第7行中的“string1”成“string2”。  

  443.       

  444.     :%s#/usr/bin#/bin#g    把文件中所有路径/usr/bin换成/bin。  

  445.     也可以使用命令 “:%s//usr/bin//bin/g” 实现,其中“#”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。  

  446.       

  447.     使用以下方法删掉文件中所有的空行及以#开始的注释行。  

  448.     cat squid.conf.default | grep -v ^$ | grep -v ^#  

  449.   

  450.     :%s/r//g           删除DOS方式的回车^M   

  451.     :%s= *$==          删除行尾空白   

  452.     :%s/^(.*)n1/1$/    删除重复行   

  453.     :%s/^.pdf/new.pdf/ 只是删除第一个pdf   

  454.     :%s///             又是删除多行注释(咦?为什么要说「又」呢?)   

  455.     :g/^\s*$/d         删除所有空行  

  456.     :g!/^dd/d          删除不含字符串'dd'的行   

  457.     :v/^dd/d           同上 (译释:v == g!,就是不匹配!)   

  458.     :g/str1/,/str2/d   删除所有第一个含str1到第一个含str2之间的行  

  459.     :v/./.,/./-1join   压缩空行   

  460.     :g/^$/,/./-j       压缩空行   

  461.     ndw 或 ndW         删除光标处开始及其后的 n-1 个字符。   



高效移动


光标移动效率是vim程序员达到甚至超过鼠标流程序员的关键技能。vim中的移动光标的方式有很多,我来举几个我实际使用过程中应用比较频繁的技巧:

set relativenumber(显示相对行号)。我无意间发现的一个十分实用的技巧,比set number显示行号更好用。通过这个设置,行号的显示会根据当前的光标的相对位置显示成偏移数,并动态变化。这个好处是,可以利用数字+j 数字+k来进行多行跳转,因为是编译行数,所以数字不会太大。否则就算要向下移动10行,我们可能也需要用138gg

  • web:按照单词进行前后光标跳转,也可以组合数字进行跳转,不过以我的经验,与其去算要跳多少个单词,不如多按几次吧。

  • IA:移动到行首或行末的第一个字符处,并进入插入模式。

  • HML:光标分别跳转到可视区域的最上面、中间、最下面。

  • Ctrl+DCtrl+U:有时,需要看的文本不在可视区域,通过这些组合进行上下翻页。

  • ^$0:光标移动到行首和行尾(0是绝对行首)。不过因为^$都需要同时按住shift,而且数字键我们往往难以盲打,所以我一般直接使用I+EscA+Esc

  • %:移动到与当前括号匹配的括号处。

  • gjgk:有时可视区域不够宽,而一行的字符有很多,导致了wrap。那么通过jk是无法直观的定位到同一物理行,却不在同一个可视行里的位置,此时需要gjgk

  • fF:通过上面的例子,我们知道,f是find的意思,可以在一行内查找某个字符出现的位置,并直接跳转过去。比如f<可以从当前光标开始向右,找到第一个<,并移动过去。F是向左查找。

  • ;:重复上一次的f查找操作

  • .:重复上一次的修改操作,跟;可以说是好基友,经常用来实现一些简单的重复操作,比录制宏要简单很多。经常有意识的使用这种简单重复,是vimer编辑思路进阶的分水岭。

高效修改

vim的另一个优势是高效修改。在vim下修改就要改掉传统鼠标流的思维方式,切忌提到修改就按i。有很多高效的修改办法,而且这些办法往往是可重复的。下面举一些我常用的例子:

  • r:替换模式,替换当前光标所在位置的一个字符。虽然你同样可以i进入插入模式,然后删掉那个字符,再输入需要的字符,但这种操作是鼠标流思维方式。替换是一个可重复操作,多用没坏处。

  • cwchange word可以删除从当前位置到一个单词的结尾,并进入插入模式。这种操作常用于修改一个变量。比如对于:int count=0;希望把count改成cnt,那么当光标位于c字符处的时候,按cw可直接删除count,并进入插入模式。然后直接继续输入cnt即可。

  • cawchange a word可以删除当前光标所在位置的单词。对于int count=0;的例子,如果此时光标在count中间某处,比如u处,直接键入caw可以达到同样的效果。所以caw更强大一些。

  • c$c^:举一反三,可以猜到c$是从当前位置删除到行尾,并进入插入模式。

  • ci"change inside "可以用于修改当前位置附近,在相同配对的"中的内容。比如对于const char *str="hello world";。当在双引号中间的任意位置键入ci"可以直接清空字符串,并继续输入新的希望的字符串。

  • ci(ci[:举一反三change inside ( change inside [

  • cit:这个比较特殊,可以直接编辑匹配的xml标签中的内容!经常编写html的童鞋可以熟悉一下。

  • yi"yank inside " 猜猜是啥意思?类似ci"只是把编辑操作编程复制操作,因为y是复制!是不是很强大。

  • ya"yank around " 复制整个字符串,包括双引号。

  • ywyawdawd$...:好了,这些可以"发明"出来了。

  • oO:向下向上增加空行

  • uCtrl+r:undo和redo

上面的例子体现了vim组合的思想,很多命令可以通过组合得到不同的效果。



Linux 编辑 windos 文件特殊字符问题

在linux下,不可避免的会用VIM打开一些windows下编辑过的文本文件。

会发现文件的每行结尾都会有一个^M符号,这是因为 DOS下的编辑器和Linux编辑器对文件行末的回车符处理不一致。

^M字符的来历和作用:
        在DOS/Windows里,文本文件的换行符为\r\n,而在*nix系统里则为\n,所以DOS/Windows里编辑过的文本文件到了*nix里,每一行都多了个^M。
        所以^M只是一个换行符号,没有实际的用处,我们可以将它保留,也可以将它删除。


对于回车符的定义: 

[plain] view plain copy
  1. windows:0D0A      // 对应 \r\n  

  2. unix\linux: 0A     // 对应  \n  

  3. MAC: 0D            // 对应  \r  

  4.   

  5.   

  6. 删除换行  

  7.   

  8. 可以用以下命令删除换行符:  

  9. :%s/\n//g  

  10.   

  11. 可以用以下命令删除DOS文件中的回车符“^M”:  

  12. :%s/\r//g  

  13.   

  14. 可以用以下命令转换DOS回车符“^M”为真正的换行符:  

  15. :%s/\r/\r/g  

  16.   

  17. 可以用以下命令删除行尾的空格以及DOS回车符。它没有使用“/”字符作为替换命令各个参数间的分隔符,而是使用了“#”字符。命令还使用了“\?”正则表达式,用来匹配它前面出现的字符0次或1次。  

  18. :%s#\s*\r\?$##  

  19.   

  20. 可以用以下命令删除三行空行:  

  21. :%s/^\n\{3}//  

  22.   

  23. 可以用以下命令将连续的两个空行替换成一个空行:  

  24. :%s/\n\n/\r/g  

  25.   

  26.   

  27. 替换命令的基本语法  

  28.    

  29. 在全局替换中,ex编辑器使用指定的字符模式对文件中的每行进行检查。在所有行中发现模式的位置,ex使用新字符串来替换模式。  

  30.    

  31. 全局替换真正使用的是两个ex命令是 :g(global全局)和:s(switch替换)。  

  32.    

  33. 替换命令的语法如下:  

  34. :s / old / new /    

  35. 这将把当前中模式old的第一次出现修改为new。  /(斜杆)是命令不同部分之间的分隔符(当斜杆为该行的最后一个字符时,可不写)  

  36.    

  37. 下面这种形式的替换命令:  

  38. :s / old / new / g  

  39. 把当前行old的每次出现改为new,而不只是该行的第一个old。:s命令允许替换串后面带有选项,上面语法中的g代表全局(g选项影响一行中的每个模式,不要把它与影响文件中所有行的:g命令混淆)  

  40.    

  41. 通过在:s命令前加上地址前缀,可以把它的范围扩展到多行。例如下面命令把50行到100行的old的每次出现都改为new:  

  42. :50, 100 s / old / new / g  

  43.    

  44. 下面的命令把整个文件中的old的每次出现都改为new:  

  45. :1, $s / old / new / g  

  46. 我们知道%等价于1,$,所以上行命令也可以这样写:  

  47. :% s / old / new / g  

  48.    

  49.    

  50.    

  51. 确认替换  

  52.    

  53. 使用搜索替换命令有时候会出错,而得到不想要的结果。所以小心并确认文件中需要修改的内容是一个明智的做法  

  54.    

  55. 在替换命令尾部加上c (confirm用于确认),在替换每个old前都会提示并确认:  

  56. :1, 30 s /old/new/ gc  

  57. 将会出现提示replace with hehe (y/n/a/q/l/^E/^Y)?    

  58. y替换,n不替换,a替换所有,q放弃,l替换第一个并进入插入模式,^E和^Y是提示你用Ctrl+e或Ctrl+y来滚动屏幕的。  

  59.    

  60.    

  61. 上下文相关替换  

  62.    

  63. 除了直接使用一个单词(或短语)替换另一个,还有稍微复杂的全局替换语法。这些语法可以对一个模式进行搜索,一旦找到含有模式的行,就可以使用不同与模式的串进行替换,我们把这种替换叫做上下文相关替换。  

  64.    

  65. 语法格式如下:  

  66. :g /pattern/s/old/new/g    将会把包含pattern的行中,把所有old替换为new  

  67. 第一个g表示是在文件的所有行上执行的命令,模式pattern识别要发生替换的行。在那些包含模式pattern的行上,ex将把old替换(s)为new。最后的g表示在该行上进行全部替换。  

  68.    

  69. 如果用来进行搜索的模式与想要修改的模式相同,那么就不必重复它:  

  70. :g/string/s//new/g  等价于  :g/string/s/string/new/g  

  71. 还要注意:  

  72. :g/string/s//new/g  也等价于 :% s/string/new/g  

  73. 可以用第二种方式少输一些字符  

  74.    

  75. 回车在vim的输入方法是ctrl+V,会得到^,此时再按回车.会得到^M这个就是回车了  

  76. 因此把全文件所有str换成str回车的语句是:  

  77. : 1,$ s/str/str^M/g  

  78. ^M用上面的方法输入  

  79.   

  80. 1,$表示从1到最后一行,s是switch,g是global  

比较快捷的去除这些符号的方法有这么几种: 
[plain] view plain copy
  1. (1)使用VI的命令:   

  2.     使用vi打开文本文件   

  3.     vi dos.txt   

  4.     命令模式下输入   

  5.     :set fileformat=unix   

  6.     :w   

  7. (2)VI下使用正则表达式替换   

  8.    g/\r/s///g  

  9.     或者   

  10.    %s/\r//g   

  11. (3)使用sed 工具   

  12.     sed ’s/\r//’ filename > tmp_filename   

  13. (4)既然window下的回车符多了‘\r’,那么当然通过删除‘\r’ ,也可以实现:   

  14.     tr -d '\r'   

  15. (5)最后一个方法是本人最常用的方法,个人觉得最方便   

  16.     在终端下敲命令:   

  17.     $ dos2unix filename   

  18.     直接转换成unix格式,就OK了!~  


用vim时,想高亮显示一个单词并查找的方发,将光标移动到所找单词.

1: shift + "*"  向下查找并高亮显示

2: shift + "#"  向上查找并高亮显示

3: "g" + "d"    高亮显示光标所属单词,"n" 查找!





一般指令模式


移动游标



按键说明
h 或向左方向键游标向左移动一个字元
j 或向下方向键游标向下移动一个字元
k 或向上方向键游标向上移动一个字元
l 或向右方向键游标向右移动一个字元
[ctrl]+[f]屏幕向下移动一页,相当于[Page Down](常用)
[ctrl]+[b]屏幕向上移动一页,相当于[Page Up](常用)
[ctrl]+[d]屏幕向下移动半页
[ctrl]+[u]屏幕向上移动半页
n+[Space]n 表示数字,按下数字后再按空格键,游标会向右移动到这一行的第 n 个字元。
功能键[Home]或 0游标移动到这一行的第一个字元处
功能键[End]或 $游标移动到这一行的最后一个字元处 (常用)
H游标移动到这个屏幕最上方那一行的第一个字元
M游标移动到这个屏幕中央那一行的第一个字元
L游标移动到这个屏幕最下方那一行的第一个字元
G游标移动到这个档案的最后一行 (常用)
nGn 为数字。游标移动到这个档案的第 n 行
gg游标移动到这个档案的第一行 (常用)
n+[Enter]n 为数字。游标向下移动 n 行 (常用)


搜索与取代



按键说明
/word在当前游标所在位置往下寻找关键字为 word 的字符串 (常用)
?word在当前游标所在位置往上寻找关键字为 word 的字符串
n这里的 n 是按键 n。代表重复前一个搜索动作
N这里的 N 是按键 N。功能与 n 相反,代表反向执行前一个搜索动作
:n1,n2s/word1/word2/gn1 与 n2 都为数字,表示行数。可在第 n1 行与第 n2 行之间寻找 word1 字符串,并替换为 word2 (常用)
:1,$s/word1/word2/g表示从第一行到最后一行,将 word1 字符串替换为 word2 (常用)
:1,$s/word1/word2/gc表示从第一行到最后一行,也是将 word1 字符串替换为 word2,不同之处是在替换前显示提示字元,由用户确认是否最终替换 (常用)

注意: 使用 /word 的同时,配合使用 n 或者 N,搜索可以变得很方便的啦 :)


删除、复制以及粘贴



按键说明
[Del] 或 x向后删除一个字元 (常用)
X向前删除一个字元 (常用)
nxn 为数字,表示连续向后删除 n 个字元
dd删除游标所在的那一行 (常用)
nddn 为数字,删除游标所在的那一行往下数 的 n 个行 (常用)
d1G删除游标所在的那行到第一行的所有数据
dG删除游标所在的那行到最后一行的所有数据
d$删除游标所在处到该行的最后一个字元
d0是数字 0,删除游标所在处到该行的第一个字元
yy复制游标所在的那一行 (常用)
nyyn 为数字, 复制游标所在的那一行往下数 n 行 (常用)
y1G复制游标所在行到第一行的所有数据
yG复制游标所在行到最后一行的所有数据
y0复制游标所在的字元到该行行首的所有数据
y$复制游标所在的字元到该行行尾的所有数据
p将已复制的数据粘贴在游标所在的那一行的下一行 (常用)
P将已复制的数据粘贴在游标所在的那一行的上一行,原来游标所在的那一行会被推后一行 (常用)
J将游标所在的行与下一行的数据合并为一行
u撤销前一个操作 (常用)
[ctrl]+r重做上一个被撤销的操作 (常用)
.这是小数点,表示重复前一个操作 (常用)

注意: 最后三个按键乃是神器,熟悉后记得经常使用它们,会让你觉得使用 vim 是一件很快乐的事情哦 :)



一般指令模式切换到编辑模式



按键说明
:w将编辑的文件写入硬盘 (常用)
:w!如果文件为只读状态,可以强制写入硬盘,是否写入成功,与你所拥有的文件权限有关
:q离开 vi (常用)
:q!即使文件未保存,仍强行离开 vi
:wq文件写入硬盘后(即保存)离开 vi (常用)
:wq!文件强制写入硬盘后(即保存)离开 vi
ZZ大写字母 Z,如果文件没有修改,则直接离开;如果文件被修改,则保存后离开
:w [filename]将当前文件另存为另一个文件,这个新文件的保存路径为当前路径
:r [filename]在当前文件中读入另一个文件的数据,插入到当前游标所在列的后面
:n1,n2 w [filename]将第 n1 行到第 n2 行的数据储存为新的文件
:! command暂时离开 vi 到指令列模式下执行 command 的显示结果

注意: ! 表示强制执行



vim 特有功能


区域选择



按键说明
v字符选择,移动游标,游标经过的地方会反白选择
V行选择,移动游标,游标经过的行会反白选择
[Ctrl]+v区块选择,移动游标以长方形方块的方式反白选择
y复制反白选择的地方
d删除反白选择的地方
p将之前复制的区块,粘贴在游标所在处

多文件编辑



按键说明
:n编辑下一个文件
:N编辑上一个文件
:files列出 vim 所打开的所有文件

注意:使用 vim a.txt b.txt … 指令,就能一次打开多个文件


多视窗



按键说明
:sp [filename]开启一个新视窗。如果有加 filename,表示是在新视窗开启一个新文件;否则,表示两个视窗为同一个文件的内容(即同步显示)
[ctrl]+w+向下方向键先按下[ctrl]不放,然后再按下 w 后放开所有按键,最后再按下向下方向键,游标就会移动到下方的视窗
[ctrl]+w+向上方向键按键方法同上,游标会移动到上方的视窗
[ctrl]+w+q关闭当前游标所在的视窗

补齐



按键说明
[ctrl]+x -> [ctrl]+n依据目前正在编辑的文件内容作为关键字,予以补齐(语法依据副档名)
[ctrl]+x -> [ctrl]+f依据当前目录下的文件名,予以补齐
[ctrl]+x -> [ctrl]+o以副档名作为语法关键字,予以补齐

环境设定参数



按键说明
:set nu设定行号
:set nonu取消行号
:set hlsearch搜索到的关键字反白显示 (默认)
:set nohlsearch搜索到的关键字取消反白显示
:set autoindent自动缩排 (默认)
:set noautoindent不自动缩排
:set backup自动存储备份档(备份档名为 filename~)
:set ruler显示右下角状态说明
:set showmode显示左下角状态说明(比如 INSERT)
:set backspace=(012)倒退键设置;2:可以删除任意值;0 或者 1,仅可删除刚刚输入的字符,无法删除原来就存在的字符
:set all显示所有环境参数设定值
:set显示与系统默认值不同的设定值
:syntax on开启语法着色
:syntax off关闭语法着色
:set bg=dark开启语法着色深色方案
:set bg=light开启语法着色浅色方案 (默认)








版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/freeking101/article/details/51125526

来自  https://blog.csdn.net/freeking101/article/details/51125526?locationNum=1&fps=1

普通分类: