vim高级操作

  • 2018-12-18
  • 浏览 (1175)

整理的vim高级操作

修改全局配置

全局配置在~/.vimrc文件设置

 #显示行号
 set nu

 #不显示行号
 set nonu

 #tab键空格数为4
 set tabstop=4

 #自动缩紧
 set autoindent

另存文件

w + 文件路径,如果这个文件已存在则会覆盖

 :w yourpath

退出

 ZQ 无条件退出

 :q! 无条件退出

 ZZ 存盘并退出

 :wq 存盘并退出

新建窗口

窗口跳转可以通过control + w + w 操作

 :sp 另外一个文件 (水平分割)

 :vsp 文件名(垂直分割)

多窗口保存和退出

 :qall

这表示 “quit all”(全部退出)。如果任何一个窗口没有存盘,Vim 都不会退出。同时

光标会自动跳到那个窗口,你可以用 “:write” 命令保存该文件或者 “:quit!” 放弃修改。

如果你知道有窗口被改了,而你想全部保存,则执行如下命令:

 :wall

这表示 “write all”(全部保存)。但实际上,它只会保存修改过的文件。Vim 知道保

存一个没有修改过的文件是没有意义的。

另外,还有 “:qall” 和 “wall” 的组合命令:

 :wqall

这会保存所有修改过的文件并退出 Vim 。

最后,下面的命令由于退出 Vim 并放弃所有修改:

 :qall!

使用 control + [ 替换 esc

两者的效果一样,使用control + [使得左右不用抬起移动esc,相对来说更方便。

复制

 yy

复制3行

 3yy

剪切

 dd

剪切3行

 3dd

粘贴

 p 或 P

删除、复制指定个数个字符

 5yl   复制光标后的5个字符(包括光标所在的那个字符)

 5yh   复制光标前的5个字符(不包括光标所在的那个字符)

 5dl   删除光标后的5个字符(包括光标所在的那个字符)

 5dh   删除光标前的5个字符(不包括光标所在的那个字符)

查找

 /查找的文字

n 搜索下一个 ,N 反向搜索下一个

快速查找

你要找当前光标定位处的字段,直接按*号,Vim就会把当前的字段作为查找内容,找下一处。

对所有行的内容进行替换

 :%s/from/to/g

### 指定行数替换 对第10行到第20行的内容进行替换,最后到c表示替换前需要确认

 :10,20s/from/to/gc

去掉 ^M 字符

 1,$s/^M//g

跳转

跳转到首行

 gg

跳转到第10行

 10gg

跳转到末行

 G

聪明的进入插入模式

很多新手进入插入模式都只是用 i。这样当然可以进入插入模式,但通常不是那么合适,因为 VIM 提供了很多进入插入模式的命令。下面是最常用的一些:

i:在当前字符的左边插入

I:在当前行首插入

a:在当前字符的右边插入

A:在当前行尾插入

o:在当前行下面插入一个新行

O:在当前行上面插入一个新行

临时退出vi/vim

有两种方法可以可以实现临时退出 Vi/Vim、进入 shell 环境后再回来的要求

方法一:使用 Ctrl-z 以及 fg 这两个命令组合。

这一解决方法主要利用了 Linux/Unix 的作业机制。具体原理是:Ctrl-z 命令将当前的 Vi/Vim 进程放到后台执行,之后 shell 环境即可为你所用;fg 命令则将位于后台的 Vi/Vim 进程放到前台执行,这样我们就再次进入 Vi/Vim 操作界面并恢复到原先的编辑状态。

方法二:使用行命令 :sh。

在 Vi/Vim 的正常模式下输入 :sh即可进入 Linux/Unix shell 环境。在要返回到 Vi/Vim 编辑环境时,输入 exit 命令即可。

这两种方法实现机制不一定,但效果一样,都非常快捷有效。

移动光标

要正确高效的运用 Vi/Vim 的各种操作,一定要把握这一原则:先定单位再定量。操作对象的范围计算公式为:操作范围 = 操作次数 * 操作单位。比如:5h 命令左移 5 个字符,8w 命令右移 8 个单词。

Vi/Vim 中操作单位有很多,按从小到大的顺序为(括号内为相应的操作命令):字符(h、l)→ 单词 (w、W、b、B、e) → 行 (j、k、0、^、$、:n) → 句子((、))→ 段落({、})→ 屏 (H、M、L) → 页(Ctrl-f、Ctrl-b、Ctrl-u、Ctrl-d) → 文件(G、gg、:0、:$)。

除了这些基本单位之外,还有 %(跳转到与之匹配的括号处),`.(跳转到最近修改过的位置并定位编辑点),’.(跳转到最近修改过的位置但不定位编辑点)这三个命令也非常重要,在 Vi/Vim 中灵活使用会极大提高效率。% 除用于光标移动之后,还可用于检测源码中各种括号的匹配情况。

定义标记

按下ma,就会给光标所在处标记了一个a,接下来可以通过`a来访问这个地方!注意,符号`是数字1左边那个符号,此外,通过’a,可以访问那个位置的行首,注意,符号’是单引号。

打命令:marks可以看到所有的标记。

而”或”,就可以在最近的两个标记之间相互跳转!

取得外部输入

 :r!<cmd> 将命令 <cmd> 的输出结果插入到当前光标所在位置

 :r <file> 将文件 <file> 读入到当前光标所在位置

执行shell命令

 :!<cmd> 

 :!pwd  #显示编辑会话当前的工作目录

## 缩进 配合操作数使用,在编辑源码的时候非常有用。

 >> 右缩进(可配合操作数使用)

 << 左缩进(可配合操作数使用)

自动补全

 Ctrl+-p

Ctrl-g 显示当前编辑文件名及行数

 Ctrl-g

不区分大小写

在 UNIX® 中执行搜索时,模式匹配是区分大小写的。但是,如果希望 vi 不区分大小写,那么可以使用:set ignorecase 命令。使用 :set noignorecase 恢复区分大小写。还可以使用简写(:set ic:set noic)。

两行合并为一行:

 int
 main(int argc,char argv)

假如要把上面两行并为一行,只需要定位于int这行,然后按J(大写),即可。

0  赞