首页 > 技术文档 > Linux > 再谈 vi 用法
2011
06-30

再谈 vi 用法

  vi 虽然是 unix 系统里最常用的编辑命令,但是因为它的命令集众多,所以很多人都不习惯使用它。凡事熟能生巧,其实大家只需要掌握基本命令,然后加以灵活运用,就会发现它的好处了。接下来北街给大家介绍 vi 的一些最常用命令和高级应用技巧。

  一、光标命令
  k、j、h、l —— 上、下、左、右光标移动命令,nk 上移n行,nj 下移n行。

  nG —— 立即使光标跳到指定行。

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

  w、b —— 使光标向前或向后跳过一个单词。

  二、编辑命令
  i、a、r —— 在光标的前、后以及所在处插入字符命令(i=insert、a=append、r=replace)。

  cw、dw —— 更改或者删除光标所在处的单词 (c=change、d=delete)。

  x、d$、dd、dG —— 删除一个字符、删除光标所在处到行尾的所有字符、删除整行的命令以及删除所有行。

  三、查找命令
  /string、?string —— 从光标所在处向后或向前查找相应的字符串的命令。

  vi 中 /abc 可以查找到含第一个abc,按快捷键 n 可以查找下一个abc

  四、拷贝复制命令
  yy、p —— 拷贝一行到剪贴板或取出剪贴板中内容的命令。

  五、常见问题及应用技巧

  1.在一个新文件中读 /etc/passwd 中的内容,取出用户名部分。

  vi file
  :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd
  :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。
  您也可以在指定的行号后读入文件内容,例如使用命令“:3r /etc/passwd”从新文件的第3行开始读入 /etc/passwd的所有内容。
  我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。
  #cat squid.conf.default | grep -v ‘^$’ | grep -v ‘^#’

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

  vi file
  :w /tmp/1 保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件,例如仅仅把第20~59行之间的内容存盘成文件/tmp/1,我们可以键入如下命令。
  vi file
  :20,59w /tmp/1

  3.用 vi 编辑一个文件,但需要删除大段的内容。

  首先利用编辑命令“vi file”打开文件,然后将光标移到需要删除的行处按Ctrl+G显示行号,再到结尾处再按Ctrl+G,显示文件结尾的行号。
  :23,1045d 假定2次得到的行号为23和1045,则把这期间的内容全删除,也可以在要删除的开始行和结束行中用ma、mb命令标记,然后利用“:’a,’bd”命令删除。

  4.在整个文件的各行或某几行的行首或行尾加一些字符串。

  vi file
  :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。
  :%s/$/some string/g 在整个文件每一行的行尾添加“some string”。
  :%s/string1/string2/g 在整个文件中替换“string1”成“string2”。
  :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。
  注意: 其中s为substitute,%表示所有行,g表示global。

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

  vi file1 file2
  yy 在文件1的光标处拷贝所在行
  :n 切换到文件2 (n=next)
  p 在文件2的光标所在处粘贴所拷贝的行
  :n 切换回文件1

  6.替换命令

  s 将当前字符替换为一个或多个字符
  S 将当前行替换为一个或多个字符
  5 s 将从当前字符开始的5个字符替换为一个或多个字符

:s/jake/una/       替换当前行第一个 jake 为 una
:s/jake/una/g      替换当前行所有 jake 为 una
:n,$s/jake/una/     替换第 n 行开始到最后一行中每一行的第一个 jake 为 una
:n,$s/jake/una/g    替换第 n 行开始到最后一行中每一行所有 jake 为 una
:%s/jake/una/      替换每一行的第一个 jake 为 una,等同于 :g/jake/s//una/
:%s/jake/una/g     替换每一行中所有 jake 为 una,等同于 :g/jake/s//una/g

  vi替换使用规则:

  :g/a1/s/a2/a3/g

  第一个 g 表示对每一个包括 a1 的行都进行替换
  第二个 g 表示对每一行包括 a1 的行所有的 a2 都用 a3 替换
  s 表示替换,a2 是要被替换的字符串,他可以和 a1 相同(如果相同的话用//代替),a3 是替换字符串。

  替换文件中的路径:

  使用命令 “:%s#/usr/bin#/bin#g” 可以把文件中所有路径 /usr/bin 换成 /bin 。也可以使用命令 “:%s//usr/bin//bin/g” 实现,其中 “” 是转义字符,表明其后的 “/” 字符是具有实际意义的字符,不是分隔符。

最后编辑:
作者:北街
身高八尺,腰围也是八尺!
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

再谈 vi 用法》有 13 条评论

  1. 优璇 说:

    不太了解这个的,觉得不错

  2. 北街 说:

    目前就职系统集成工程师

  3. Enjoyed examining this, very good stuff, thanks .

  4. 北京摄影 说:

    值得分享的,值得学习,值得评论

  5. 很好的博客,多学多看。

  6. Louis Han 说:

    我一直就上不了手

  7. @北街 这个需要考思科,华为的认证吗?

  8. 很好,支持博主。

  9. 软件盒子 说:

    这个以后学习

  10. 学习了…多谢分享了

  11. 聊天室 说:

    路过,顺祝新年快乐

  12. 北街兄在Linux环境下工作?

留下一个回复

你的email不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.