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命令神图:

时间: 2024-10-13 16:05:48

vim的常用用法的相关文章

vim的常用用法总结

vim和vi用法基本上一样,vim更强大一些,还有颜色标示.vim的使用,vim有三种模式分别是一般模式,编辑模式,命令模式. 一般模式:删除.复制和粘贴 x:向后删除        X:向前删除       nx:向后删除n个字符       dd:删除当行       D:删除当行字符       ndd:删除当前行向下的n行       yy:复制光标所在的行       p:将复制的数据粘贴在光标的下一行       P:将复制的数据粘贴在光标的上一行 编辑模式: i:在光标所在的位置插

vim常用用法

vim和vi用法基本上一样,vim更强大一些,还有颜色标示.vim的使用,vim有三种模式分别是一般模式,编辑模式,命令模式. 一般模式:删除.复制和粘贴 x:向后删除 X:向前删除 nx:向后删除n个字符 dd:删除当行 D:删除当行字符 ndd:删除当前行向下的n行 yy:复制光标所在的行 p:将复制的数据粘贴在光标的下一行 P:将复制的数据粘贴在光标的上一行 编辑模式: i:在光标所在的位置插入字符 I:在光标所在的行第一个非空位置插入输入的字符 a:当前光标下一个位置输入字符 A:光标所

vim编辑器常用技巧

(一).写作缘由: 在使用linux的过程中,无论是运维管理还是普通用户都难免对操作文件,拥有一款得心应手的编辑器是必不可少的.可以说绝大部分使用者都是使用的vi/vim编辑器,不仅仅是因为它是linux系统默认安装了的软件,还因为它体积很小,功能强大. vim(VI iMproved)编辑器可以说是vi(visual interface)的扩展版,vim支持语法高亮等特性,以及各种高效率的操作.使得编辑文件的效率得到提高,当然这需要使用者对其相对较熟悉. (二).vim的常见模式: (1).v

9.vim的常用命令《Mr.Robot》

前言:这些是vim最常用的命令!记住了会提高效率的<Mr.Robot> ---------------------------------------------------- vim需要的常用命令: d G     全部删除 i        当前编辑 o       新起一行编辑 gg             行首 G               行尾 10 gg        跳转到第十行 10  回车     向下跳转10行 u  撤销 ctrl  r  反撤销 yy  复制 p  粘

Vim 的常用操作

一. vim中的查找替换 修改当前行 :s/str1/str2/ 修改当前行的第一个str1为str2 :s/str1/str2/g 修改当前行的所有str1为str2 修改第n行到第m行 :n,ms/str1/str2/ 修改第n行到第m行的第一个str1为str2 :n,.s/str1/str2/ 修改第n行到当前行的第一个str1为str2 :.,ms/str1/str2/ 修改当前行到第m行的第一个str1为str2 :n,$s/str1/str2/ 修改第n行到最后一行的第一个str1

log4j的常用用法

最近一段时间一直在用别人封装好,配置好的日志类记录日志,感觉挺好奇的.下面就记录一下用log4j处理日志的常用用法. 至于log4j是什么,我不清楚,暂时也觉得没必要太深入,只知道是处理日志比较好的选择. Game Starts 参考文档 1)官方pdf文档 2)配置log4j(和详细) 3)Log4j 的日志级别 依赖jar包 1)log4j-api-2.0.2.jar    2)log4j-core-2.0.2.jar [D] 主要的类 1)Logger 看名字也就知道是干什么的了,就是靠他

二十八、Linux下Vim工具常用命令

在linux下做开发,甚至是只做管理维护工作,也少不了Vim的使用.作为一个新手,我也是刚刚接触,本节将我日常使用或收集的Vim常用命令记录下来. 当然,直接在命令行上输入:vimtutor,就可以学习到Vim的所有命令了.Vim很强大,很多牛人在vim里集成很多插件什么的,但这里只介绍基本vim命令 移动命令 h "左 j "下 k "上 l "右 w "光标移动到下一个单词的首字符 a word forward b "光标移动到上一个单词的首

Objective-C NSString的常用用法

//1.创建常量字符串. NSString *astring = @"This is a String!";   //2.创建空字符串,给予赋值. NSString *astring = [[NSString alloc] init]; astring = @"This is a String!"; [astring release]; NSLog(@"astring:%@",astring);//NSString *astring = [[NS

关于function的一种常用用法

关于function的一种常用用法 void Share::InitAcrossManager() { GsMgrEvent gsMgrEvents;//保存function的结构体 gsMgrEvents.fnSendData2Client = [this](int nChannelId, void* pData, int nLen)//lambda绑定,当然也可以用std::bind进行绑定 { SendCmd2C(nChannelId, s2c_prop_opt, pData, nLen)