• 9675阅读
  • 2回复

【转载自LinuxSir】VIM 的一般使用技巧(Maitou) [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-07-30
VIM 的一般使用技巧

说明:

在文本中[]表示选项或者简写掉的文字,但除了模式匹配里面的[],可参见模式匹配。


源码:

vi vim 使用
vim 编辑器

首先简单的说一下vi编辑器──unix的通用编辑器,
读作vee-eye (visual editor的简写)。
(这里的vim,是改进的vi, Vi Improved简写,Vim 由Bram Moolenaar编写)
vi的工作模式
  分为命令模式和插入模式 以及 : ex模式;
      按esc键就可以让vi进入命令模式;
      插入模式就是你输入文本的模式了。
     
vi的一些简单操作:
  普通操作:
      插入文本
          命令 i 、a、I、A、o、O
          i     进入命令模式输入 i ,这时候就是和普通的文本编辑器一般了;
          a     或者 输入 a ,不同的是,a是在字符的后面插入追加文本,而i在字符的前面插入;
          I     行首插入;
          A     行尾插入。
          o     光标下新建空行
          O     光标上新建空行
      修改删除文本
          命令 c、x、d、D
          cw     删除当前位置到该位置单词的末尾,外加插入文本;     cw删除的是英文单词,中文不行的。
          c$ or C     删除当前位置到行末,外加插入文本。
          x     只删除当前字符     如果要删一个中文字的话请用 2x (当然也可以用4x 8x) 因为一个汉字占两个字符。
          cc     删除一行,外加可以插入文本。
          r     删除当前字符,外加可以插入文本。
          dw     只删除当前位置到这个单词末。
          [n]dd     删除[n]一行。 当然可以用 2dd 3dd 删除两行,三行。
          D     删除到行尾。
                 
      粘贴,复制,合并
          命令 p、y、J、"(引号)
          p     当你执行上面的删除操作后,你所删除的文本会留在缓存中,当你输入 p 后会把这些删除的文本粘贴到当前光标后面。
          y     组合有(yw,4yy,y$等) //复制单词,复制四行,复制到行末     复制后可用p进行粘贴
          J     把下一行合并到当前行,注意J大写
          "[x]yy     命名你的缓冲区 在复制命令前加上冒号和名称(a到z) 例如 "ryy "d2dd "zd)复制一行到r缓冲区,删除2行到d缓冲区,删除光标到句尾到z缓冲区。
          "[x]p     粘贴x缓冲区到当前位置后。
              默认有1~9缓冲区 为前9次删除操作。
      可视操作
          命令 v、V、Ctrl+v
     
          当用gvim可以用鼠标选择你需要复制,删除的文本,然后按d(删除)、p(粘贴)、y(复制)操作你的文本,
          当然也可以和其他程序通过粘贴板进行共享数据。
          v     对于xterm中的vim 则输入命令 v 进入可视状态,这时候你可以用右键进行复制粘贴操作
         
      重复操作与撤消
          命令 . (点号) 、 u 、U
          .     重复上一次的操作,当并不是那种重作,他只是重复你上次输入的命令。
          Ctrl+R     重做
          u     撤消上次操作
          U     撤消当前行进行的任意修改。
      查找文本
          命令 /、?、n、N
          /     向后查找文本进入命令模式输入 /[你要查找的文本]; 例如找edit 输入 /edit ;
          ?     而向前查找文本就是输入 ?[你要查找的文本] ;
          n     当有许多搜索结果时,命令模式下输入 n 就可以找下一个搜索结果,而输入 N
          N     则是反向下一个搜索结果。
         
      打开,保存与退出
          先进入ex模式,就是在命令模式下输入 : 再输入命令。
          命令 ZZ、 q、 w、 e、r
          :ZZ     进入命令模式 输入 ZZ (大写)就是保存+退出;
          :w     保存文本 进入命令模式 输入 w 就是保存;
          :q!     强行退出是输入 q! ;
          :e!     撤消当前所有编辑,返回原始状态的话,请输入 e! ;
          :w [filename]     另存为就是 w [filename] 。
          :e [filename]     打开另外一个文件(打开新文件前,请先保存文件。
          :r [filename]     读入filename内容到当前文件的当前位置后
  移动光标
          命令 hjkl、(、)、{、}、e、w、b、gg、G
         
          hjkl     一般可直接用键盘上的方向键进行光标的移动。而page up/down 键就是前后翻页了;
              或者,命令模式下 按
              h(左)     j(下) k(上) l(右)
              或者在这个基础加上数字,进行几行几行的移动,例如 4j就表示向下移动四行。
          nG     例如200G 就是移动200行了。而Ctrl+G就是显示当前行信息(多少行,在文本的位置);
          G     到文件尾
          gg     到文件头
     
          e     另外     输入 e 可以一单词的移动光标,
              (     当前句首
              )     下一句开始 例如     2) 向前移动两个句子
              {     段开始
              }     下一段头
              b、w     后前以单词为单位移动。
                 
      标记命令 m、‘(单引号)、`(反引号也就是 ~ 那里那个键)
          m[x]     标记x(a~z)位置 例如 mb 标记当前光标位置为标志b
          ’x     移动光标到x标记行的行首
          `x     移动光标到x标记的原始光标位置
          ''     移动到上一标记行首
          ``     移动到上一标记原光标位;
          zl zh zs ze 窗口左滚 右滚 左开始 右结束 //可设置 :set sidescroll=32 设置滚动长度(我好象用不了这个命令)
  其他
          Ctrl+L     刷屏
          return     到下一行行首    
          -、+     移动光标上下一行,上下一行的行首(好象+号要用小键盘的+号才行);
          Ctrl+G     显示当前行信息
          H     屏幕起点
          M     屏幕中间
          L     屏幕尾
     
  组合使用例子     命令模式下
          例子:现有文本
 
          aaabbb
          cccdddeeefff (光标在第一行)
         
          输入 /aab回车 d     /ccc回车 那就会删除掉当前位置aab(包括aab), 到ccc前所有数据并复制数据到缓冲(和剪切差不多)。当然d也可用改成y做复制用途,再用p粘贴。
         
vim的ex状态         当在: ex模式下可以用tab进行自动补齐命令(用: set nu 显示行数) 并可以利用 | 可以将多个命令组合在同一提示符下

  文本搜索,替换,移动,删除,复制
  命令 :g/、:s/ 、:m 、:d、:co (或者:t)
      :g     :g/[文本]     全局搜索文本,光标移动到最后一个搜索文本,并显示所有数据加所在行。
          :g!/[文本] 没有[文本]的行
      :s     :[第n行],[到第m行]s/[要替换的]/[替换的] n-m行之间进行替换,如果没有n,m那么就进行当前行的替换
          :%/s/[要替换的]/[替换的]/g     进行全局替换。 %表示每一行, 另外有 . 表示当前行, $ 表示最后一行,另外可用+-号表示该行的上下n行,例如.-2 表示当前行上面第二行
      :m     :[要移动的数据]m[移动的地方]     例子     :20,30m100 20-30行移动到100行前(最后一行是100行)
      例子:     :g/^$/d     删除所有空行 d加上删除动作
         
     
  搜索模式
      .(点号)     任一个单字符,汉字用两个点 ..
      *     匹配前面字符零个或者多个任意(并不表示任意字符) 例如 /abcdl* 就会查找abcdl或者以abcd开始的,而查找所有是 /.*
      ^     表示从行首开始
      $     $在表达式末表示以正则表达式要在行末。
      \     转义 \.表示找. \*表示找* \\表示找\
      [ ]     [0~9]表示匹配0~9之间任意一个数字 同理有[A~Z]和[a~z],而[AB3a]表示找有A,B, 3,a其中任意一个字符。
      \< , \>     单词开始或者末尾以空格或者标点符号开始或者结束。 例如 inux\> 匹配linux.
      \r     回车
      \t     制表符
  执行sh命令
      :![shell command]     例如 :!ls
     
  添加数据到文件末 >>
      例子     :1,10w>>newfile
     
  需要注意的是vim可以把一些命令组合起来应用
      :1,3d | s/they/she/     一到三行删除,并把当前行they替换为she
      :.,/while/d         删除当前行到匹配while行所有数据(包括当前行和含有while所在行)
      :/aaa/,/bbbb/d         aaa到bbbb之间行删除(包括这两行)
      :/aaa/,/bbb/m.         aaa到bbb行move到当前行
     
 
     
 
  分屏
      :[N]sp[lit] [filename]     另开窗口,高度是N行,并打开filename文件。
      Ctrl+w     [x]         准备进行窗口操作,其中x是按Ctrl+w后,需要选择的功能键(可参见下一行) 例如Ctrl+w 再按t就会到顶端窗口
      Ctrl+w     [s/w/t/b/c/q/r/i/=]     s 再分屏,w下一个窗口,t顶窗口,b底端窗口,c关闭窗口 q退出窗口 r循环窗口 i打开并进入新窗口 =所有窗口同高
      :hide             隐藏当前窗口,当不关闭该文件缓冲(也就是说再次用 :e [filename] 打开后依然是先前的文件)
      :q             关闭窗口,并释放缓冲。
      :qa[!]             关闭所有窗口并强行退出vim;
      :on[ly]             只显示当前窗口
      :new     [filename]     新建文件并打开新窗口。
      :res[ize][n] :res[ize][+ -n]     改变窗口大小,或者增加减少行数
 
用vim编程
  :make [arguments]     运行make 然后移动到第一个错误,
  :cf[ile] [!] [errorfile]读取错误文件,并移动到第一个错误处,!强迫vim移动到另外的缓冲区,
  :cl[ist] [!]         列出含有文件名的错误,有!就列出所有错误,
  :cc[!] [n]         如果有n就显示错误n,否则重新显示当前错误,
  :cn[ext]         移动到下一个错误。
  :cp             移动到上一个错误。
 
  另外一个有用的编程功能是使用ctags(unix命令,给C语言中的函数打标记。这个命令与vi的tags结合使用)
      先用ctags命令 :!ctags file.c 创建该c程序tags文件,再在vi中使用     :tag [函数名] ,那么vi就直接调出该c原文件并跳到函数定义处。
      例如:     :!ctags *.c
          :tag aaa     其中bbb.c 中有aaa函数,那么就跳到aaa的定义处
          :tn         跳到下一个匹配标志
          :tp         上一个标志
     
 
设置vim
  :set all     显示所有选项。
  :set nu[mber]     显示行数。
  :set binary     可读二进制文件
  :syntax on     语法高亮
  :set taglength=4     设置tag长度
  记不住可使用tab键补齐命令(也可以显示可以选择的命令)
 
vim的配置文件 .vimrc
  在vim的安装目录下有一个vimrc_example.vim文件,你可以copy到你的工作目录上作为你的原始vim配置文件(文件改名为.vimrc)
 



 
 
vi引证
  最后,这里有关vi的认证:vi是完美的
  论证:VI在罗马数字中是六,小于六的自然数可以整除6的是1,2,3, 6=1X2X3; 而6有可以表示为6=1+2+3,可见VI是个完美的数字,从而VI也是完美的。
 
  对于vim
  罗马数字中VIM可能表示为(1000-(5+1))=994,而刚好等于2×496+2,而496刚好可以被1,2,4,8,16,31,62,124,248等整除,而且1+2+4+8+16+31+62+124+248=496
  因此496是个更完美的数字,可见vim比vi更加完美了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zncggaofei
只看该作者 1楼 发表于: 2007-10-17
路过,回顾!
There is someone that is coming or passing away in your life around the clock, so you may lose sight of those seen, and forget those remembered. There is gain and loss in your life, so you may catch sight of those unseen, and remember those forgotten. Nevertheless, doesn’t the unseen exist for sure? Will the remembered remain forever?
离线supwater
只看该作者 2楼 发表于: 2008-05-08
路过,回顾。
谋事在人,成事在天!
快速回复
限100 字节
 
上一个 下一个