VIM

vim编辑器是模式化编辑器

编辑方式: vim [options] [/path/to/somefile]

打开默认模式:命令模式,编辑模式



模式转换:

编辑模式 --> 输入模式:

  i: insert, 实现在当前光标所在处字符前面转换为输入模式;

  a: append, 实现在当前光标所在处字符后面转换为输入模式;

  o: 实现在当前光标所在行的下方新建一个空白行并转换为输入模式;

  I: 在当前光标所在行的行首转为输入模式;

  A: 在当前光标所在行的行尾转为输入模式;

  O: 在当前光标所在行的上方新建一行,并转为输入模式;

输入模式 --> 编辑模式:

 按下Esc键;


编辑模式 --> 末行模式:

 键入:


末行模式 --> 编辑模式:

 Esc, Esc


光标跳转:

字符间跳转:

  h: 在光标所在处向左移动

  l: 在光标所在处向有移动

  j: 在光标所在处向下移动

  k: 在光标所在处向上移动

  #h: 在光标所在处向左侧跳#个字符;


单词间跳转:

  w: 后一个单词的词首

  e: 跳至当前或下一个单词启尾;

  b: 跳至当前或前一个单词启首;


句子间跳转:

  ): 跳至下一句;

  (: 跳至前一句;


段落间跳转:

  }: 跳至下一段;

  {: 跳至前一段;


行间跳转:

  1G,gg:跳到第一行

  G:调到最后一行

  #G:跳到第#行


关闭文件:

在末行模式下:

  输入: w 保存

  q  退出

  !  强制

  wq 保存退出

  q! 强制退出

  x 保存退出

在编辑模式下:

  ZZ:保存退出;


打开文件:

编辑方式:vim [options] /path/to/file


vim +# /path/to/file 表示打开文件并直接让光标出现在第#行上

 如:# vim +100 funcions 光标直接处在第100行首


打开多个文件:

在末行模式下输入next:在末行模式下输入next ,进入下一个文件

       last :进入最后一个文件

       first :进入第一个文件

       prev :进入前一个文件


       -O: 垂直分割窗口

       -o:水平分割窗口

此时在末行模式下使用qall全部退出

编辑命令:

  x: 删除光标所在处单个字符

  #x: 删除光标所在处向右#个字符

  d: 删除命令

  dw:删除光标所在处向后的单词

  db:删除光标所在处向前的单词

  de:删除光标所在处单词或下个单词

  d^:删除光标所在处一直到行首

  d$:删除光标所在处一直到行尾

  dd: 删除光标所在行整行;

  #dd: 删除光标所在行及向下#行;


在末行模式下使用d命令

末行模式支持地址定界:起始地址,结束地址

  $: 最后一行;

  .: 当前光标所在行;

  %: 全文


   1,7d:删除从第一行到第七行

   %d: 删除全文

   1,$d: 删除从第一行到最后一行

   1,+6d:删除从第一行到下面第六行

   1,$-2d:第一行到倒数第三行

   .,+3d:删除当前光标所在行以及下面3行


编辑操作可撤消

u: vim默认会最近50次的操作,u命令可逐一撤消此前的编辑操作;


  撤消此前的撤消操作:Ctrl+r:


  粘贴操作:p

  paste, put


如果删除的是整行:

  p: 在当前光标所在行的下方粘贴;

  P:在当前光标所在行的上方粘贴


删除的不是整行:

  p: 在当前光标所在处字符的后方粘贴;

  P:在当前光标所在处字符的前方粘贴;

  复制:y, yank

  yy:表示复制一行

  #yy:表示复制#行

  y$:表示复制光标到行尾

  y^:表示复制光标到行首


如果复制的是整行:

  p: 在当前光标所在行的下方粘贴;

  P:在当前光标所在行的上方粘贴


如果复制的不是整行:

  p: 在当前光标所在处字符的后方粘贴;

  P:在当前光标所在处字符的前方粘贴;

查看vim用法:vimtutor


翻屏操作:

  Ctrl+f: 向文件尾部翻一屏;

  Ctrl+b: 向文件首部翻一屏;

  Ctrl+d: 向文件尾部翻半屏;

  Ctrl+u:向文件首部翻半屏;



文本搜索:

  /keyword: 从当前光标所在处向文件尾部查找

  ?keyword:从当前光标所在处向文件首部查找

  n: 从当前光标所在处向下一个查找,跟查找命令相同的方向

  N:从当前光标所在处向前一个查找,跟查找命令相反的方向

模式

 例如:/\<d[[:alpha:]]\{2\}n\> :查找文件中以d开头,以n结尾,中间跟了任意两个字母的单词



编辑命令

  c:柔和编辑和转换至输入模式两种功能

  cc :直接删除光标所在行并转换成输入模式

  #cc:

  c$ :直接删除光标所在处到行尾

  c^ :直接删除光标所在处到行首

  vim编辑器另外一只模式:可视化模式:

      visual模式

  v: 选中光标划过的字符,字符选取

  V:选中光标划过的行,整行选取

 此时划过后敲y键复制

 敲Esc, Esc:回到编辑模式


同一文档窗口分割:

  Ctrl+w,s: 水平分割

  Ctrl+w,v: 垂直分割


 Ctrl+w+箭头  :在窗口键跳转

窗口属性定义:

  显示行号:

  set number, set nu  显示行号

  set nonumber, set nonu 取消行号


自动缩进

  set autoindent, set ai

  set noai


字符编辑时不区分字符大小写

   set ignorecase, set ic

  关闭不区分大小写 set noic  


显示匹配的括号:

  set showmatch, set sm

  关闭功能 set nosm


语法着色:

  syntax on

  syntax off

搜索高亮显示(只对当前有效)

  set hlsearch

  set nohlserach

vim的配置文件:

全局:/etc/vimrc 对所有的vim都生效

个人:~/.vimrc


查找替换:(在末行模式下)

  :地址定界s/查找模式/替换成的内容/gi

  :地址定界s@查找模式@替换成的内容@gi

:把/dev/null 替换成/tmp/a.txt

      %s/\/dev\/null/\/tmp\/a.txt/g

  也可以写成  : %s@/dev/null@/tmp/a.txt@g


练习

 1 把所有的不区分大小写的dev后加上ice

   %s/\([dD][eE][vV]\)/1ice/g

   或写成:%s@[dD][eE][vV]@&ice@g -->@可以引用前面所用的整个字符串[dD][eE][vV]

 2 删除行首开头的#:

     %s@^#@@

 3  删除行首开头的#及后面紧跟的空白字符;

     %s@^#[[:space:]]*@@

 4 为空白字符开头的行的行首加上#;

    %s@^[[:space:]]@#&@

 5、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;

    %s@id:3:@id:5:@g

 6、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;

   %s@^#[[:space:]]\{1,\}@@

 7、为指定范围内的行的行首添加#;

     1,10s@^@#@g