vim 用法总结
vim 共分三种模式:一般模式、编辑模式、命令行模式。
几乎所有操作都可以加入数字,表示重复操作若干次。“[n]”表示在相应位置输入数字可达到重复操作的目的。
学习 Vim 操作的三个基本步骤:(from《Seven habits of effective text editing》Written by Bram Moolenaar)
- 当你在编辑的时候,留心注意一下哪些操作是你频繁在做的或者花费了你相当多的时间。
- 看看是否有这样的命令可以更快地做这个操作。看文档、询问朋友或者看看别人是怎么做这个操作的。
- 训练自己使用这个命令,直到可以不过脑子而敲出这个命令为止。
一般模式:
光标跳转或屏幕移动:
[n]hjkl 简单的光标移动,依次为左下上右
[n]Ctrl+f 屏幕向下移动一整页或 n 页
[n]Ctrl+b 屏幕向上移动一整页或 n 页
Ctrl+d 屏幕向下移动半页
Ctrl+u 屏幕向上移动半页
0 光标移动到行首
[n]$ 光标移动到行尾或往下数第 n 行的行尾
[n]gg 光标移动到第一行行首或第 n 行行首
[n]G 光标移动到最后一行行首或第 n 行行首
[n]H 光标移动到屏幕的最上方那一行或屏幕中的正数第 n 行
[n]L 光标移动到屏幕的最下方那一行或屏幕中的倒数第 n 行
M 光标移动到屏幕的正中间那一行
[n]Ctrl+o 光标移动到上一次或上 n 次跳转(不包括 hjkl 的简单光标移动和屏幕移动)之前的位置
[n]Ctrl+i 撤消 Ctrl+o 操作一次或 n 次
[n]fc 光标移动到光标所在行从光标位置开始往后数第 1 次或第 n 次出现的字符 c (a-z, 0-9 等)
% 光标从 “[], (), {}, #if #endif” 等配对中的一个移动到另一个所在位置
[{ 光标回到当前所在代码块的起始 { 处
]} 光标走到当前所在代码块的结尾 } 处
gd 光标移动到当前变量的局部声明处
`` 光标跳转到上一个位置。重复输入将会在两个位置之间来回跳转
删除、复制、粘贴、撤消与还原:
[n]x 向后删除一个字符,相当于 Delete
[n]X 向前删除一个字符,相当于 Backspace
[n]dd 删除光标所在行或从该行往下共 n 行
[n]dgg 删除光标所在行到第一行的全部内容或光标所在行到第 n 行的全部内容
[n]dG 删除光标所在行到最后一行的全部内容或光标所在行到第 n 行的全部内容
d0 删除光标所在位置到行首的全部内容(不包括光标所在位置的字符)
[n]d$ 删除光标所在位置到行尾的全部内容(包括光标所在位置的字符)或光标所在位置往下共 n 行
d[n]{h|j|k|l} 可被其他操作代替,略
将以上各操作中的字母 d 换成字母 y 则是相应的复制操作。
(注:不光是复制操作,每次删除操作后被删掉的内容也会立刻存入寄存器并覆盖掉之前寄存器中的内容。所以在复制之后粘贴之前不要再随意删东西了。)
p 若复制的是整行,则粘贴(插入)到光标所在行的下一行;否则粘贴(插入)到光标所在位置之后
P 若复制的是整行,则粘贴(插入)到光标所在行;否则粘贴(插入)到光标所在位置
J 将光标所在行与下一行结合成同一行,中间以一个空格分隔
u 撤消上一个操作
Ctrl+r 还原上次撤消的动作
. 重复前一个动作
搜索:
n 重复上一个搜索动作
N 反向重复上一个搜索动作
* 搜索当前光标所在处的单词并自动移动到下一个匹配处
# 搜索当前光标所在处的单词并自动移动到上一个匹配处
一般模式 —> 编辑模式
i 在光标所在位置插入
I 在光标所在行第一个非空格符处插入
a 在光标所在位置之后插入
A 在光标所在行的行尾插入
o 在光标所在行的下一行插入
O 在光标所在行插入
s 删除光标所在位置的字符并插入,相当于 xi
S 删除整行并插入,相当于ddO
c 它的动作与 d 一样,只是在删除操作后立刻进入编辑模式
C 删除光标所在位置到行尾的全部内容并插入,相当于d$a
r 替换光标所在位置的字符
R 保持替换模式(Replace),直到按下 Esc 为止
块选择:
v 字符选择,将光标经过的地方反白选择
V 行选择,将光标经过的行反白选择
Ctrl+v 块选择,以矩形方式反白选择
y 复制反白的地方
d 删除反白的地方
(注:无论 y 或 d,寄存器中的内容都会被反白选择的内容替换)
编辑模式:
自动补全:
Ctrl+n 自动搜索匹配当前已经输入的字符串的命令
命令行模式:
搜索:
/str 从光标位置开始向下寻找名为 str 的字符串
?str 从光标位置开始向上寻找名为 str 的字符串
替换:
一般形式:
:s/str1/str2 将光标所在行第一次出现的 str1 替换为 str2
在 str2 后添加 “/g”,每行所有的 str1 都将被替换为 str2
在 str2 后添加 “/c”,每次替换前都要让用户确认
在 str2 后添加 “/gc”,综合两种效果
在 s 之前添加 “n1,n2”,对第 n1~n2 行执行替换
在 s 之前添加 “1,$” 或 “%”,对整个文件执行替换
保存及退出:
:w 保存
:wq 保存并退出
:q 退出(仅在文件未被修改过时有效)
:q! 不保存任何修改,强行退出
ZZ 若文件未被修改,则不保存退出;若文件已被修改,则保存后退出
:w filename 将当前文件另存为 filename
:n1,n2 w filename 将第 n1~n2 行的内容保存为 filename 文件
:r filename 将 filename 文件中的内容插入到光标所在行的下一行
:! command 在 vim 中执行 bash 命令 command
多文件编辑:
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出当前 vim 打开的所有文件
多窗口功能:
:sp [filename] 若不写 filename,则在新窗口中打开当前文件;否则在新窗口中打开 filename 文件
Ctrl+w j 光标移到下方的窗口
Ctrl+w k 光标移到上方的窗口
Ctrl+w q 关闭光标所在的窗口
环境设置:
:set nu 显示行号
:set nonu 取消行号
:set hlsearch 以黄色背景高亮显示所有与搜索字符串匹配的字符串
:set incsearch 动态查找当前已经输入的搜索字符串
:set tabstop=4 设置 TAB 按键的宽度,默认为 8
:set 显示当前各项设置值
:set all 显示所有设置项的名字
(注:将常用的设置写到 ~/.vimrc 文件中,就不用每次打开 vim 重新进行设置了)
高级用法
多行注释/取消注释:
脚本注释::n,ms/^/#
C++注释::n,ms/^/\/\/
在要注释的第一行行首处按 Ctrl+v,然后将光标置于要注释的最后一行,按 I(大写的 i),键入“#”或“//”,再按 Esc,等待 1s 左右即可。
代码排版:
== 排版当前行
Shift + v + = 排版选定若干行
gg=G 全文排版
多行缩进:
V 行选择后按 < 或 >
Ctrl+v 法
多行删除::n,md
全文删除::%d
回到包含当前光标所在位置的最内层 {} 的 { 处:[{ (]} 则是回到 } 处,[[ 是回到最外层的 { 处)
分屏显示:
sp(上下分屏)
vs(左右分屏)
原地编译(不退出 Vim):
:make(前提是已经存在 Makefile)
:cl 列出 Vim 认为有价值的编译信息
:cl! 列出完整编译信息
:cn 跳转到下一个错误处
:cp 跳转到上一个错误处
其他
寄存器介绍
vim 中有多个寄存器可供使用,输入 “:reg” 可查看目前已使用的所有寄存器中存放的内容
还没有评论,来说两句吧...