vim的常用用法

Vi/Vim 是所有 Unix/Linux 操作系统默认配备的编辑器。因其强大的功能和高效的操作,Vi/Vim 也成为众多 Unix/Linux 用户、管理员必须掌握并熟练使用的编辑工具之一。

我在学习和使用linux的过程中,基本都是使用vim来写程序,用得越多也用得越熟悉,也越发现vim的强大之处,下面我就作些笔记,把最常用的vim命令记一记。

1.vim的启动与切换

vim <filename> 即可打开需要查看的文件,当文件不存在时系统会自动建立新文件;

:open file,or  :e  <filename> 在vim窗口中打开一个新文件;

:q 退出vim, :wq  :q!   shitf+zz   ;

当需要从vim的编辑界面临时切换到shell环境下时,可以采用如下3种方式,非常方便。

  • :! + command 即可在vim下执行shell命令, 如: :!ls -al ;
  • 使用 Ctrl-z 以及 fg 这两个命令组合,ctrl-z将vim进程放入后台运行,执行完shell命令之后,fg将vim拿回前台执行;
  • 在 Vi/Vim 的正常模式下输入 :sh即可进入 Linux/Unix shell 环境。在要返回到 Vi/Vim 编辑环境时,输入 exit 命令即可。

2.vim的操作单位

在使用vim时,弄清vim命令的操作单位十分有必要。

Vi/Vim 中操作单位有很多,主要包括:

  • 字符(h、l):以字符为单位,h前一字符,l后一字符;
  • 单词 (w、W、b、B、e) :小写以非字母字符为分割,大写以非空白字符(空格、Tab)分隔;w下一个单词,b上一个单词,e光标所在单词结尾;
  • 行 (j、k、0、^、$、:n):j下一行,k上一行,^ 0行首,$行尾,:n 跳到n行;
  • 句子((、)):VI以标点符号?、。!中的一个,当这些标点后至少有2个空格,或者作为一行的最后一个非空格字符出现;
  • 段落({、}):段落以空行为分割;
  • 屏 (H、M、L):H 移动到屏幕的第一行,M 移动到屏幕的中间一行 L 移动到屏幕的最后一行;
  • 页(Ctrl-f、Ctrl-b、Ctrl-u、Ctrl-d):Ctrl-f 向前滚动一页,Ctrl-b 向后滚动一页, Ctrl-u 向前滚动半页,Ctrl-d 向后滚动半页
  • 文件(G、gg、:0、:$):G 移动到文件末尾,gg 移动到文件开头;
  • 特殊:%(跳转到与之匹配的括号处),`.(跳转到最近修改过的位置并定位编辑点),‘.(跳转到最近修改过的位置但不定位编辑点)。

vim移动的 操作范围 = 操作次数 * 操作单位。比如:10l 命令右移 10 个字符,8w 命令右移 8 个单词。

3.vim的编辑命令

插入命令:

  • i insert 在当前光标之前插入
  • a append  在当前光标之后插入
  • I 大写在行首插入
  • A 大写在行尾插入
  • o 在当前光标所在行的下面一行插入
  • I  在当前光标所在行的上面一行插入

修改命令:

 

  • x 删除当前字符, 3x 删除当前光标开始向后三个字符;
  • dd 删除当前行, 10d 删除当前行开始的10行, :11,$d 删除11行及以后所有的行;
  • yy 拷贝当前行, 2yy拷贝当前行及其下一行;
  • p 在当前光标后粘贴;
  • u , Ctrl-R ,撤消与前进;
  •  ~ 光标字母大小写反转,guw 光标单词小写 ,gUw 光标单词变为大写 ,guu 光标行所有字符小写,gUU 光标行所有字符变为大写 ,g~~ 光标行所有字符大小写反转;
  • . 点重复上一条命令,点号在linux的其他地方也有很多用法(点号的五种用法);
  • >> 右缩进 ,<< 左缩进, 配合操作数使用,在编辑源码的时候非常有用;

 多行注释:

  • 1. 进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来
  • 2. 按大写字母I,再插入注释符,例如//
  • 3. 按esc键就会全部注释了 

取消多行注释:

  • 1. 进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列
  • 2. 按字母j,或者k选中注释符号
  • 3. 按d键就可全部取消注释

 

4.vim搜索与替换

  • /string 向前搜索指定字符串;
  • ?string 从光标处开始向上开始查找字符从string;
  • 因为支持正则表达式,所以vim中有一些特殊字符在查找时需要转义 .*[]^%/?~$;
  • n 搜索下一个;
  • N 反向搜索下一个;
  • * 在文件中向前搜索当前光标所在的单词;
  • # 在文件中向后搜索当前光标所在的单词;
  • :m,ns/str1/str2/g 将 m 行到 n 行中的字串 str1 全部替换为字串 str2;

5.vim环境设置

 

  • :set 查看vim环境变量
  • :set number 显示行号
  • :set no number 取消行号显示
  • :set autoindent 设置自动缩进
  • :set no autoindent 取消自动缩进设置
  • :set shiftwidth=4 设置缩进宽度为 4
  • :set ignorecase 设置忽略大小
  • :set no ignorecase 取消忽略大小设置
  • :set list 显示不可见字符
  • :set nolist 取消显示不可见字符设置
  • :set hlsearch   高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配
  • :set nohlsearch   关闭高亮搜索显示
  • :set wrapscan   重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启

有时候在vim打开文件时发现代码的缩进错位,这很有可能是由于tab键在不同环境下设置的空格数不同造成的。

  对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:
  TAB替换为空格:
  :set ts=4
  :set expandtab
  :%retab!

  空格替换为TAB:
  :set ts=4
  :set noexpandtab
  :%retab!

6.vim多屏操作

vim的多屏操作很适合查看大型的项目

  • :new 水平切割窗口,默认打开空白窗口
  • :split 水平切割窗口(或者直接输入:sp ),默认打开当前文件
  • :vsplit 垂直切割( 也可以 :vsp )
  • Ctrl+ww 移动到下一个窗口
  • Ctrl+w+(hjkl) 向不同方向移动窗口;
  • vim -o a.txt b.txt c.txt为每一个文件打开一个水平分割窗口
  • vim -O a.txt b.txt c.txt为每一个文件打开一个垂直分割窗口

vimdiff命令: 对比两个文件的差异,代码merge十分方便

  • vim -d file1 file2 或  vimdiff file1 file2 , 使用vim的比较模式打开两个文件;
  • :diffthis  用split方式打开了两个文件file1,file2,比较两文件的不同,分别在两个窗口里面输入该命令
  • [c 跳到前一个不同点
  • ]c 跳到后一个不同点
  • dp 将差异点的当前文档内容应用到另一文档(diff put)
  • do 将差异点的另一文档的内容拷贝到当前文档(diff get)
  • :set diffopt=context:3 , vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠
  • zf 创建折叠(使用数字表示创建有当前行到下多少行的折叠,比如3j就创建包括4行的折叠)
  • zo 打开折叠(l也可以打开折叠)
  • zc 关闭当前折叠
  • zm 关闭所有折叠
  • zr 打开所有折叠
  • zE 删除所有折叠
  • zd 删除当前折叠
  • za 若当前打开则关闭,若当前关闭则打开(这个十分方便)
  • zj 到下一折叠的开始处
  • zk 到上一折叠的末尾

先总结这么多,还有像函数跳转等一些命令,等等,用到的时候再去整理吧,看一遍可能只能记住一小会,只有实际应用才会形成潜意识!

推荐 http://www.ibm.com/developerworks/cn/linux/l-cn-tip-vim/ 

这篇文章是我见过介绍vim基本命令最有条理的文章的了,本文也借鉴了其中很多内容,表示感谢!

最后插入一张vim命令神图:

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。