vim高级操作

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

整理的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!

#esc 可以使用control + [ 替换

#复制
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

#有两种方法可以可以实现临时退出 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(大写),即可。



正文到此结束