0%

Vim使用手册

VIM编辑器的用法,包含基础用法和高级用法。
VIM的配置文件是用户家目录下.vimrc, 修改该文件加入inoremap jj , 表示映射ESC键到两次j键,可以提高操作效率


1 Normal-mode

用于浏览文件,也包含复制,粘贴,删除等操作。这种模式下,键盘按键会当做功能键处理,不会真正的键入这些字符

1.1 漫游

  • h 向左
  • j 向下
  • k 向上
  • l 向右
  • 0 跳到行首
  • ^ 跳到行首第一个非空字符
  • $ 跳到行尾
  • gg 跳到文件的第一行的行首
  • G 快速到文件的最后一行的行尾
  • % 匹配括号移动,包括(,{,[
  • |# 匹配光标当前所在的单词,移动光标到下一个单词处,是下一个,#是上一个
  • ctrl+f 查看下一页内容
  • ctrl+b 查看上一页内容
  • 100G 跳转到第一百行的行首

1.2 复制

  • yy 复制光标所在整行
  • 100yy 复制光标坐在行及以下共100行
  • yw 复制光标开始的第一个单词
  • y$ 复制光标到行尾
  • yG 复制光标所在行到文本的结束
  • yH 复制文本开始到光标所在行的文本
  • fa 移动光标到本行下一个a的字符处
  • Fa 反前移动光标到字符a处
  • nfa 移动光标到下第n个字符a处
  • nFa 向前移动光标到第n个字符a处
  • ta 移动光标到a字符的前一个字符
  • nta 移动光标到第n个a字符前一个字符
  • Ta 向前移动光标到a字符出现的后一个字符
  • nTa 向前移动到第n个a字符出现后的一个字符
  • yfB 复制光标到第一个大写B中间的内容
  • y2fB 复制光标到第二个大写B中间的内容

1.3 剪切

  • x 向后剪切一个字符,如果是行尾则向前剪切
  • 3x 剪切三个
  • xp 非行尾交换两个字符,如果是bs编程sb

1.4 删除

  • dd 删除光标所在行
  • 200dd 删除光标所在行及以下共100行
  • dw 删除一个单词
  • dnw 删除n个单词
  • df” 删除到出现第一个双引号的位置
  • dnf” 删除到出现第n个双引号的位置
  • d$ 删除光标到本行的结尾
  • d^ 删除光标到本行的开头
  • dH 删除文本开始到光标所在行的文本
  • dG 删除光标所在行到文本的结束

1.5 粘贴

  • p 粘贴复制或剪切的内容
  • 3p 将复制或剪切的内容粘贴三次
  • P 光标前开始粘贴
  • 3P 光标前开始粘贴3次

1.6 窗口命令

  • ctrl+w s 水平分割窗口
  • ctrl+w w 切换窗口
  • ctrl+w q 关闭当前分屏,如果是最后一个分屏则退出VIM
  • ctrl+w c 关闭当前分屏
  • ctrl+w v 垂直分割窗口
  • ctrl+j|k 可以用于切换上下窗口
  • ctrl+h|l 可以用于切换s水平窗口
  • ctrl+w H|L 可以用于左右移动当前分屏
  • ctrl+w J|K 可以上下移动当前分屏

1.7 文件保存

  • ZZ 大写的字母ZZ,保存当前文件
  • ZQ 大写的字母ZQ, 放弃对文件的修改并退出

1.8 关键字和路径补全

  • ctrl+x -> ctrl+n 透过目前正在编辑的文件内容作为关键库补全
  • ctrl+n 也可以快速补全,没有提示
  • ctrl+x -> ctrl+f 以当前目录内的档案作为关键字补全路径文件
  • ctrl+x -> ctrl+o 以文件名作为语法补充,以wim内建的关键字予以补全

1.9 撤销操作和恢复

  • u 撤销刚才的操作
  • ctrl+r 恢复撤销操作

1.10 删除字符和替换

  • x 删除光标当前所在的字符
  • r 替换掉光标当前所在的字符
  • R 替换掉从光标开始以后的所有字符,除非退出

1.11 大小写转换

  • ~ 将光标下的字母改变大小写
  • 3~ 将光标位置开始的3个字母改变其大小写
  • g~~ 改变当前行字母的大小写
  • gUU 将当前行的字母改成大写
  • guu 将当前行的字母改成小写
  • 3gUU 将从光标所在行下面共三行字母改成大写
  • gUw 将光标下的单词改成大写
  • guw 将光标下的单词改成小写

1.12 折叠功能

  • zf5G 折叠当前光标行到第5行, 可以通过行号折叠,也可以通过文本选择折叠
  • zo 打开光标所在位置的折叠
  • zO 打开光标所在位置的折叠,以及嵌套的所有折叠
  • zc 关闭光标所在位置的折叠
  • zC 关闭光标所在位置的折叠,以及嵌套的所有折叠
  • zd 删除光标所在位置的折叠
  • zD 删除光标所在位置的折叠,以及嵌套的所有折叠
  • za 当光标在关闭折叠上时,打开折叠,反之则关闭折叠
  • zA 和za类似,打开和关闭包括嵌套的所有折叠
  • zv 打开当前光标所在位置的折叠,仅打开足够的折叠使光标所在的行不被折叠
  • zr 嵌套的折叠一层一层的打开
  • zR 打开所有折叠
  • zm 嵌套的折叠一层一层的关闭
  • zM 关闭所有折叠
  • zE 删除所有的折叠
  • zF 在当前光标所在行创建折叠。这样可以先创建一对折叠符号,然后再在里面写内容
  • 2,10fo 折叠第二行到第十行
  • [z 移动光标到当前打开的折叠开始位置
  • ]z 移动光标到当前打开的折叠结束位置
  • zj 移动光标到下一个折叠开始位置
  • zk 移动光标到上一个折叠结束位置

1.13 宏录制以及播放

  • 录制宏,在普通模式按下q键(宏录制是以q键启动的),再按下字母w(字母随意),表示该宏注册为w, 然后完成操作后再次按下q表示完成录制操作。
  • 宏播放, 在正常模式下,按下@w执行宏录制的所有操作。@@是对上次宏的重复操作。n@w, 就会执行n次w宏。

2 Command-mode

在正常模式下按下”:”(冒号)键或者/(撇号),进入命令模式,可以输入和执行一些VIM或者插件命令,这些指令包含设置环境,文件操作,调用某个功能

2.1 通用

:%s/$/sth/ 行尾追加sth

:%s/\^M//g 替换掉dos换行符,^M使用Ctrl+v+Enter即可输入

:g/\^/s*$/d 删除空行以及只有空格的行

:n1,n2 s/str1/str2/gic 替换行号n1到n2之间的字符串str1为str2, g关键字表示一行出现多个,则都替换,如果没有g,则只替换第一个,i关键字表示大小写不敏感,即忽略大小写,大写的字母I表示大小写敏感,这也是默认的。c关键字表示替换前确认。每个关键词均可单独使用

:%s/#.*//g 删除#之后的字符

/hansen 查找字符串hansen, n查找下一个匹配, N查找上一个匹配,2n查找下面第二个匹配

:help set 查看set命令的帮助信息

:set 显示与系统预设值不同的设定参数,就是自己修改的那些设定

:syntax on|off 打开和关闭程序的语法高亮

:set bg=dark|light 设置不同的背景色

2.2 文件操作

  • :w 将编辑的内容写入文件中
  • :w! 将文件在只读状态时强制写入,实际写入还得看文档权限
  • :q 离开vim
  • :qa! 退出所有文件,对所有文件不做修改保存
  • :x 退出文件并保存对文件的修改
  • :e fn 打开另外一个文件

    • :n 跳转到下一个文件
    • :N 跳转到上一个文件
    • :bn 跳转到下一个文件
    • :bp 跳转到上一个文件
    • :ls 列出打开的所有文件
    • :b2 显示第二个文件
  • :q! 将至退出修改过的文件,丢掉所有修改
  • :wq 存储后退出
  • :w fn 将文件另存为文件名fn
  • :r fn 将fn文件读入并追加到目前编辑文件光标后
  • :n1, n2 w fn 将n1到n2的内容存储成fn文件
  • :n1,n2 d 将n1到n2行的所有内容删除,d是删除关键字
  • :! command 显示离开编辑器并执行command命令
  • :r! command 执行command命令,并将执行结果追加到光标后
  • :sp fn1 上下分屏打开另外一个文件
  • :vsp fn1 左右分屏打开另外一个文件

2.3 设置

:set nu 开启显示行号

:set hlsearch 搜索到的关键字高亮

:set autoindent 开启自动缩进

:set backup 是否自动存储档案,当开启后,每次打开文件编辑的时候,原始文件会命名为fn~

:set ruler 打开后关闭右下角的状态栏说明

:set ic 在关键词搜索的时候区分大小写

:set showmode 打开和关闭模式切换后的状态,比如进入insert mode的时候,左下角会显示—INSERT—

:set wrap 设置折行,即一行文本超过了屏幕,则在下一行显示,这也是默认的

:set backspace=(012) 进入编辑模式,可以利用backspace来按键来删除任意字符,但是某些distribution则不容许这样。此时可以通过设置backspace来实现这个功能,=2,就是删除任何字符,=0|1时,仅可以删除输入的字符,而无法删除原来文本存在的字符

:set fdm=marker 开启折叠标记,自动在折叠的开始与结束添加三个连续的花括号作为标记,可以在文本关闭后,依旧记录折叠信息,需要每次打开都得设置这个环境,也可以把这个加入到~/.vimrc中,每次打开vim编辑器自动加载。可以在mark后的折叠

:set fenc 查询文档编码

:set enc=utf8 转换为指定的编码

:set sidescroll=0 当光标到达屏幕边缘的时候,自动扩展显示1/2屏幕文本,设置为1, 可以实现更加平滑的逐个字符扩展显示,此设置需要设置nowrap

:set linebreak 设置VIM在合适的位置折行,即^|!*-+;:./?这些符号位置折行

:set breakat-= 设置将下划线从折行中移除

:set showbreak=-> 在折行的位置显示指示信息

:set nolinebreak 恢复自定义折行

:set ts=4 设置TAB为四个空格长度

:set expandtab 替换TAB为空格,设置后之后的tab被替换为ts数量的空格

%retab! 重新加载TAB,这样原来的TAB也会替换为ts数量的空格

:set ts=4

:set noexpandtab

:%retab!

tabe fn 使用VIM插件minibuffer新建标签页功能,在一个新的标签页编辑文件fn,

  • gt 切换到下一个标签页
  • gT 切换到上一个标签页
  • :tabr 切换到第一个标签页
  • :tabl 切换到最后一个标签页
  • :tabm [N] 把当前tab移动到第N个tab之后

:map ^M I# 设置快捷键Ctrl+m在光标处所在行的行首插入#(#代表注释),然后在退出编辑状态。map是关键字,后面的是key和value。key对应的是^M,这个key是快捷键Ctrl+v+M输入的,代表快捷键Ctrl+M。Value对应的是I#, 表示依次执行这些快捷键。I表示切换光标至行首并进入编辑状态,#表示输入#,表示退出编辑状态。

:ab email hualong1009@foxmail.com ab是关键词,该命令执行后,然后切换到编辑模式,输入email后,会把email自动替换为邮件地址hualong1009@foxmail.com。适用于频繁输入同样的长字符串场景

3 Insert-mode

在正常模式按下一些按键(如i, a等)进入插入模式
i 从当前光标的位置进入插入模式
I 进入插入模式,并将光标至于行首
a 追加模式,置光标于当前光标之后
A 追加模式,置光标于行末
o 在当前行之下新加一行,并进入插入模式
O 在当前行之前新加一行,并进入插入模式
ESC 退出插入模式

4 Visual-mode

可视化模式
按下v,V,+V, 可以进入可视化模式,操作像是拿鼠标选择一样,操作会很方便。
继续按下CTRL+v会退出可视化模式

使用方向键或者h,j,k,l进行漫游,选中相应的内容,也可以使用gg和G直接到文件首或尾

ctrl+v 块模式,块操作,和UE的块操作一样

o 跳转光标到选中块的另一个端点

U 将选中块中的内容转化为大写

O 跳转光标到块的另一个端点

aw 选中一个字

ab 选中{}括号中的所有内容,包含括号本身

aB 选中{}括号中的所有内容

ib 选中括号中的内容,不包含括号

iB 选中括号中的所有内容

va 当光标在””,’’,(),{},[]当中时候,va表示选中””内所有的内容包含双引号

vi 当光标在””,’’,(),{},[]当中时候,va表示选中””内所有的内容不包含双引号

块右移

< 块左移

y 复制块

d 删除块

~ 切换块中内容的大小写

在该模式下选择区域后直接输入:, VIM会自动补全为:’<,’> 这个是可视模式下选区的替换操作,表示操作范围,类似与制定n1, n2

5 vim编辑文本

vim file 编辑一个文件

vim fn1 fn2 … 同时编辑多个文件,默认只显示第一个文件,也就是file1

vim -on fn1 fn2 … 上下分屏同时编辑多个文件

vim -On fn1 fn2 … 左右分屏打开多个文件

📌转载请注明来源,版权归作者@hualong1009所有, 谢谢

如果您觉得还不错,可以请我喝杯咖啡。