LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 5656|回复: 18

VIM 的一般使用技巧

[复制链接]
发表于 2004-5-28 02:11:19 | 显示全部楼层 |阅读模式
说明:

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

  1. vi vim 使用  
  2. vim 编辑器
  3. 首先简单的说一下vi编辑器──unix的通用编辑器,
  4. 读作vee-eye (visual editor的简写)。
  5. (这里的vim,是改进的vi, Vi Improved简写,Vim 由Bram Moolenaar编写)
  6. vi的工作模式
  7.         分为命令模式和插入模式 以及 : ex模式;
  8.                 按esc键就可以让vi进入命令模式;
  9.                 插入模式就是你输入文本的模式了。
  10.                
  11. vi的一些简单操作:
  12.         普通操作:
  13.                 插入文本
  14.                         命令 i 、a、I、A、o、O
  15.                         i        进入命令模式输入 i ,这时候就是和普通的文本编辑器一般了;
  16.                         a        或者 输入 a ,不同的是,a是在字符的后面插入追加文本,而i在字符的前面插入;
  17.                         I        行首插入;
  18.                         A        行尾插入。
  19.                         o        光标下新建空行
  20.                         O        光标上新建空行
  21.                 修改删除文本
  22.                         命令 c、x、d、D
  23.                         cw        删除当前位置到该位置单词的末尾,外加插入文本;        cw删除的是英文单词,中文不行的。
  24.                         c$ or C        删除当前位置到行末,外加插入文本。
  25.                         x        只删除当前字符         如果要删一个中文字的话请用 2x (当然也可以用4x 8x) 因为一个汉字占两个字符。
  26.                         cc        删除一行,外加可以插入文本。
  27.                         r        删除当前字符,外加可以插入文本。
  28.                         dw        只删除当前位置到这个单词末。
  29.                         [n]dd        删除[n]一行。 当然可以用 2dd 3dd 删除两行,三行。
  30.                         D        删除到行尾。
  31.                                        
  32.                 粘贴,复制,合并
  33.                         命令 p、y、J、"(引号)
  34.                         p        当你执行上面的删除操作后,你所删除的文本会留在缓存中,当你输入 p 后会把这些删除的文本粘贴到当前光标后面。
  35.                         y        组合有(yw,4yy,y$等) //复制单词,复制四行,复制到行末         复制后可用p进行粘贴
  36.                         J        把下一行合并到当前行,注意J大写
  37.                         "[x]yy        命名你的缓冲区 在复制命令前加上冒号和名称(a到z) 例如 "ryy "d2dd "zd)复制一行到r缓冲区,删除2行到d缓冲区,删除光标到句尾到z缓冲区。
  38.                         "[x]p        粘贴x缓冲区到当前位置后。
  39.                                 默认有1~9缓冲区 为前9次删除操作。
  40.                 可视操作
  41.                         命令 v、V、Ctrl+v
  42.                
  43.                         当用gvim可以用鼠标选择你需要复制,删除的文本,然后按d(删除)、p(粘贴)、y(复制)操作你的文本,
  44.                         当然也可以和其他程序通过粘贴板进行共享数据。
  45.                         v         对于xterm中的vim 则输入命令 v 进入可视状态,这时候你可以用右键进行复制粘贴操作
  46.                        
  47.                 重复操作与撤消
  48.                         命令 . (点号) 、 u 、U
  49.                         .        重复上一次的操作,当并不是那种重作,他只是重复你上次输入的命令。
  50.                         Ctrl+R        重做
  51.                         u        撤消上次操作
  52.                         U        撤消当前行进行的任意修改。
  53.                 查找文本
  54.                         命令 /、?、n、N
  55.                         /        向后查找文本进入命令模式输入 /[你要查找的文本]; 例如找edit  输入 /edit ;
  56.                         ?        而向前查找文本就是输入 ?[你要查找的文本] ;
  57.                         n        当有许多搜索结果时,命令模式下输入 n 就可以找下一个搜索结果,而输入 N
  58.                         N        则是反向下一个搜索结果。
  59.                        
  60.                 打开,保存与退出
  61.                         先进入ex模式,就是在命令模式下输入 : 再输入命令。
  62.                         命令 ZZ、 q、 w、 e、r
  63.                         :ZZ        进入命令模式 输入  ZZ  (大写)就是保存+退出;
  64.                         :w        保存文本 进入命令模式 输入 w 就是保存;
  65.                         :q!        强行退出是输入 q! ;
  66.                         :e!        撤消当前所有编辑,返回原始状态的话,请输入 e! ;
  67.                         :w [filename]        另存为就是 w [filename] 。
  68.                         :e [filename]        打开另外一个文件(打开新文件前,请先保存文件。
  69.                         :r [filename]        读入filename内容到当前文件的当前位置后
  70.         移动光标
  71.                         命令 hjkl、(、)、{、}、e、w、b、gg、G
  72.                        
  73.                         hjkl        一般可直接用键盘上的方向键进行光标的移动。而page up/down 键就是前后翻页了;
  74.                                 或者,命令模式下 按
  75.                                 h(左)        j(下) k(上) l(右)
  76.                                 或者在这个基础加上数字,进行几行几行的移动,例如 4j就表示向下移动四行。
  77.                         nG        例如200G 就是移动200行了。而Ctrl+G就是显示当前行信息(多少行,在文本的位置);
  78.                         G        到文件尾
  79.                         gg        到文件头
  80.                
  81.                         e        另外         输入 e 可以一单词的移动光标,
  82.                                 (        当前句首
  83.                                 )        下一句开始 例如        2) 向前移动两个句子
  84.                                 {        段开始
  85.                                 }        下一段头
  86.                                 b、w         后前以单词为单位移动。
  87.                                        
  88.                 标记命令 m、‘(单引号)、`(反引号也就是 ~ 那里那个键)
  89.                         m[x]        标记x(a~z)位置 例如 mb 标记当前光标位置为标志b
  90.                         ’x        移动光标到x标记行的行首
  91.                         `x        移动光标到x标记的原始光标位置
  92.                         ''        移动到上一标记行首
  93.                         ``        移动到上一标记原光标位;
  94.                         zl zh zs ze 窗口左滚 右滚 左开始 右结束 //可设置 :set sidescroll=32 设置滚动长度(我好象用不了这个命令)
  95.         其他
  96.                         Ctrl+L        刷屏
  97.                         return        到下一行行首       
  98.                         -、+        移动光标上下一行,上下一行的行首(好象+号要用小键盘的+号才行);
  99.                         Ctrl+G        显示当前行信息
  100.                         H        屏幕起点
  101.                         M        屏幕中间
  102.                         L        屏幕尾
  103.                
  104.         组合使用例子           命令模式下
  105.                         例子:现有文本
  106.        
  107.                         aaabbb
  108.                         cccdddeeefff (光标在第一行)
  109.                        
  110.                         输入 /aab回车 d         /ccc回车 那就会删除掉当前位置aab(包括aab), 到ccc前所有数据并复制数据到缓冲(和剪切差不多)。当然d也可用改成y做复制用途,再用p粘贴。
  111.                        
  112. vim的ex状态                当在: ex模式下可以用tab进行自动补齐命令(用: set nu 显示行数) 并可以利用 | 可以将多个命令组合在同一提示符下
  113.         文本搜索,替换,移动,删除,复制
  114.         命令 :g/、:s/ 、:m 、:d、:co (或者:t)
  115.                 :g        :g/[文本]        全局搜索文本,光标移动到最后一个搜索文本,并显示所有数据加所在行。
  116.                         :g!/[文本]  没有[文本]的行
  117.                 :s        :[第n行],[到第m行]s/[要替换的]/[替换的]  n-m行之间进行替换,如果没有n,m那么就进行当前行的替换
  118.                         :%/s/[要替换的]/[替换的]/g        进行全局替换。 %表示每一行, 另外有 . 表示当前行, $ 表示最后一行,另外可用+-号表示该行的上下n行,例如.-2 表示当前行上面第二行
  119.                 :m        :[要移动的数据]m[移动的地方]         例子        :20,30m100 20-30行移动到100行前(最后一行是100行)
  120.                 例子:        :g/^$/d        删除所有空行 d加上删除动作
  121.                        
  122.                
  123.         搜索模式
  124.                 .(点号)        任一个单字符,汉字用两个点 ..
  125.                 *        匹配前面字符零个或者多个任意(并不表示任意字符) 例如 /abcdl* 就会查找abcdl或者以abcd开始的,而查找所有是 /.*
  126.                 ^        表示从行首开始
  127.                 $         $在表达式末表示以正则表达式要在行末。
  128.                 \        转义 \.表示找. \*表示找* \\表示找\
  129.                 [  ]        [0~9]表示匹配0~9之间任意一个数字 同理有[A~Z]和[a~z],而[AB3a]表示找有A,B, 3,a其中任意一个字符。
  130.                 \< , \>        单词开始或者末尾以空格或者标点符号开始或者结束。 例如 inux\> 匹配linux.
  131.                 \r        回车
  132.                 \t         制表符
  133.         执行sh命令
  134.                 :![shell command]         例如 :!ls
  135.                
  136.         添加数据到文件末 >>
  137.                 例子        :1,10w>>newfile
  138.                
  139.         需要注意的是vim可以把一些命令组合起来应用
  140.                 :1,3d | s/they/she/        一到三行删除,并把当前行they替换为she
  141.                 :.,/while/d                删除当前行到匹配while行所有数据(包括当前行和含有while所在行)
  142.                 :/aaa/,/bbbb/d                aaa到bbbb之间行删除(包括这两行)
  143.                 :/aaa/,/bbb/m.                aaa到bbb行move到当前行
  144.                
  145.        
  146.                
  147.        
  148.         分屏
  149.                 :[N]sp[lit] [filename]         另开窗口,高度是N行,并打开filename文件。
  150.                 Ctrl+w        [x]                准备进行窗口操作,其中x是按Ctrl+w后,需要选择的功能键(可参见下一行) 例如Ctrl+w 再按t就会到顶端窗口
  151.                 Ctrl+w        [s/w/t/b/c/q/r/i/=]        s 再分屏,w下一个窗口,t顶窗口,b底端窗口,c关闭窗口 q退出窗口 r循环窗口 i打开并进入新窗口 =所有窗口同高
  152.                 :hide                         隐藏当前窗口,当不关闭该文件缓冲(也就是说再次用 :e [filename] 打开后依然是先前的文件)
  153.                 :q                        关闭窗口,并释放缓冲。
  154.                 :qa[!]                        关闭所有窗口并强行退出vim;
  155.                 :on[ly]                        只显示当前窗口
  156.                 :new        [filename]        新建文件并打开新窗口。
  157.                 :res[ize][n] :res[ize][+ -n]        改变窗口大小,或者增加减少行数
  158.        
  159. 用vim编程
  160.         :make [arguments]        运行make 然后移动到第一个错误,
  161.         :cf[ile] [!] [errorfile]读取错误文件,并移动到第一个错误处,!强迫vim移动到另外的缓冲区,
  162.         :cl[ist] [!]                列出含有文件名的错误,有!就列出所有错误,
  163.         :cc[!] [n]                如果有n就显示错误n,否则重新显示当前错误,
  164.         :cn[ext]                移动到下一个错误。
  165.         :cp                         移动到上一个错误。
  166.        
  167.         另外一个有用的编程功能是使用ctags(unix命令,给C语言中的函数打标记。这个命令与vi的tags结合使用)
  168.                 先用ctags命令 :!ctags file.c 创建该c程序tags文件,再在vi中使用        :tag [函数名] ,那么vi就直接调出该c原文件并跳到函数定义处。
  169.                 例如:         :!ctags *.c
  170.                         :tag aaa        其中bbb.c 中有aaa函数,那么就跳到aaa的定义处
  171.                         :tn                跳到下一个匹配标志
  172.                         :tp                上一个标志
  173.                
  174.        
  175. 设置vim
  176.         :set all        显示所有选项。
  177.         :set nu[mber]        显示行数。
  178.         :set binary         可读二进制文件
  179.         :syntax on        语法高亮
  180.         :set taglength=4         设置tag长度
  181.         记不住可使用tab键补齐命令(也可以显示可以选择的命令)
  182.        
  183. vim的配置文件 .vimrc
  184.         在vim的安装目录下有一个vimrc_example.vim文件,你可以copy到你的工作目录上作为你的原始vim配置文件(文件改名为.vimrc)
  185.        
  186.        
  187.        
  188. vi引证
  189.         最后,这里有关vi的认证:vi是完美的
  190.         论证:VI在罗马数字中是六,小于六的自然数可以整除6的是1,2,3, 6=1X2X3; 而6有可以表示为6=1+2+3,可见VI是个完美的数字,从而VI也是完美的。
  191.        
  192.         对于vim
  193.         罗马数字中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
  194.         因此496是个更完美的数字,可见vim比vi更加完美了。
  195.        
  196.        
  197.        
  198.        
  199.        
  200.        
  201.        
  202.    
复制代码
发表于 2004-5-28 09:58:59 | 显示全部楼层
最后的引证有点“那个”...
另外补充一点:在编程那里,:cp是移动到上一个错误
:!xxd是显示文件的十六进制编码
:!xxd -r是还原成文本方式
 楼主| 发表于 2004-5-28 11:26:17 | 显示全部楼层
我编程少用,
加上:cp
发表于 2004-5-28 17:31:56 | 显示全部楼层
用ctags,
看源码的时候,ctrl-],跳函数定义。
ctrl-t,返回。

我还喜欢终端全屏时,用vsplit分屏显示。
options里设increase,smart search也很方便。
好用的功能太多。

vim是个好东东。我喜欢。
发表于 2004-5-28 20:08:55 | 显示全部楼层
:ce 文本居中
:ri 文本右对齐
:le 文本左对方
发表于 2004-5-30 14:38:39 | 显示全部楼层
:set ai

自动缩进

我很喜欢的。
发表于 2004-6-10 21:34:40 | 显示全部楼层
:set ai
自动缩进
:set noai
不自动缩进
:syntax on
语法高亮
:syntax off
不语法高亮
:set nu
显示行号
:set nonu
不显示行号
发表于 2004-7-25 23:19:08 | 显示全部楼层
:set showmatch
自动匹配{}[]()
发表于 2004-8-13 18:20:13 | 显示全部楼层
今天发现的一个功能:
在关键词上按K可以man。
顺便问一个问题:
用vi file1 file2,然后想只退出file1的编辑怎么搞?
:q的话两个都退出来了。
发表于 2004-8-13 18:26:36 | 显示全部楼层
:n
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表