Vim 命令整理

1. 文件命令
2. 模式切换
3. 移动命令
4. 书签命令
5. 修改命令
6. 可视化操作
7. 区域选择
8. 宏命令
9. 分屏
10. 系统设置命令

1. 文件命令

[:]开始的命令需要输入[Enter]结束
 
:q:退出
:q!:退出不保存
:qa!:退出所有文件不保存
:w:保存
:e <file>:关闭当前文件并打开另一个文件
:saveas <file>:另存为<file>
 
:wq 或 :x 或 ZZ:保存并退出(ZZ不需要冒号[:])
 
:bn或:n:打开多个文件时,切换到下一个文件
:bp:多个文件时,切换到上一个文件
 
sudo权限强制写入::w !sudo tee % (!sudo - 执行shell命令sudo,tee - 将:w结果重定向,% - 当前文件)
:help <command>:显示命令帮助
 
:!<command>:执行一个Shell命令
:bash:启运一个shell而不退出vi。exit 命令后回到vim
:[n]:冒号后跟数字表示要到第几行,如果跟1,表示到文件头,如果跟$,表示到文件尾
Ctrl+G:可以显示当前行在整个文件的百分比

2. 模式切换

2.1 Normal模式 转 插入模式

i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行
<C-V>c:输入特殊字符^C
<C-P>或<C-N>:自动补齐

2.2 插入模式 转 Normal模式

[ESC]

3. 移动命令

N<command>:重复某个移动或修改命令N次
h、j、k、l:左、下、上、右 移动
g[h、j、k、l]:让移动相对于屏幕显示的行数而不是vim内部的行数

3.1 行内移动

w:移动到下一个单词开头
e:移动到下一个单词结尾
b:移动到前一个单词开头
W/E/B:移动时单词以空格分隔,默认只包含字母、数字和下划线
0:移动到当前行首
^:移动到当前行的第一个非空字符
$:移动到行尾
g_:移动到当前行尾第一个非空字符
):移动光标到下一个句子,使用句号[.]或换行分隔
( :移动光标到上一个句子,使用句号[.]或换行分隔 

3.2 文件内移动

G:到文件尾
[n]G:移动光标到指定的行(n)。(比如 10G 就是到第 10 行)
gg:到文件首
 
H:移动光标到屏幕上面
M:移动光标到屏幕中间
L:移动光标到屏幕下面
 
<C-F>:向下移动一屏
<C-B>:向上移动一屏

3.3 查找并移动

行内查找

使用[;]重复上一个 f/t/F/T 命令
fx:移动光标到当前行的下一个 x 处。x 可以是任意一个字母,而且你可以
tx:和上面的命令类似,但是是移动到 x 的左边一个位置(这真的很有用)
Fx:和 fx 类似,不过是往回找
Tx:和 tx 类似,往回找的 x 的右边一个位置

文件内查找

%:跳转到配对的括号
[[:跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
'':跳转到光标上次停靠位置的行首字母处, 是两个', 而不是一个"
*:读取光标处的字符串,并且移动光标到它再次出现的地方。重复搜索按[n]
#:和上面的类似,但是是往反方向寻找。重复搜索按[n]
gd或gD:跳转到光标所在局部变量(或任意字符串)的定义处
/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。重复搜索按[n]
?text:和上面类似,但是是反方向

4. 书签命令

ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。
`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。

5. 修改命令

.:重复上一次修改命令
N<command>:重复某个移动或修改命令N次,还可以重复其他命令,如10iza[ESC],表示重复插入10次za。
u:撤销上次修改
U:撤销当前行的所有修改
<C-R>:(撤销后)重做上次修改

5.1 格式控制

>>:增加缩进,"x>>"表示增加以下x行的缩进
<<:减少缩进,"x<<"表示减少以下x行的缩进 
 
合并下一行与当前行: J 

5.2 剪切(删除)、复制、粘贴

*motion可以是任意移动命令,如^、$、G、w、fx
*剪切板(又叫寄存器[register]),[:reg]列出使用中的寄存器及内容,使用"ayy将当前行复制到寄存器a,使用"ap粘贴寄存器a的内容
d{motion}:剪切,把motion"掠过"的文本剪切到剪切板
c{motion}:剪切并进入插入模式
dd:剪切当前行
cc:剪切当前行并进入插入模式
D:剪切光标当前位置到行尾,类似于[d$]
C:剪切光标当前位置到行尾并进入插入模式,类似于[c$]
x:剪切当前字符. (类似于命令模式的退格(backspace)键)
s:剪切当前字符并进入插入模式
y{motion}:复制,同上
yy:复制当前行到剪切板
Y:复制行到剪切板,类似于[yy]
 
p:粘贴到当前位置之后
P:粘贴到当前位置之前
]p:和p相似, 但自动调整粘贴代码的缩进
]P:和P相似, 但自动调整粘贴代码的缩进

5.3 查找替换

:%s/word1/word2/g:全文搜索word1并以word2替换之
:[n],[m]s/word1/word2/g:仅在第a行到第b行间搜索并替换
字符串查找时,”\n” 是换行,”\r” 是回车,也就是经常会看到的 ^M。

字符串替换时,”\r” 是换行,’\n” 是空字符(0×00)

 
删除空行:g/^\s*$/d

6. 可视化操作

选择文本

v:字符选择
V:行选择
<C-V>:块选择,可以选择任意矩形块

操作

d/c/y:删除或复制
gu或gU:全变小写或大写 
J:连接所有行
>或<:左右缩进
=:自动缩进

实例

^ 选择 Ixx[ESC]:行首插入
选择 Ixx[ESC]:块前插入xx
选择 Axx[ESC]:块末插入xx
选择 $ Axx[ESC]:行末插入

7. 区域选择

<action> [n] a/i <object>:选择object所指目标范围内的n重内容,如单词、句子、括号()、[]
<action>:d - 删除,y - 拷贝,v - 可视化选择
a/i:a - 包含object,i - 不包含object
<object>:w - 单词,W - 空格分隔单词,s - 句子,p - 段落,"/'/)/}/] - 括号或引号

8. 宏命令

qa:开始录制宏并保存在寄存器[a]
q:结束录制
@a:回放存在寄存器a的宏
@@:回放最新的宏
 
实例
qaYp<C-A>q 100@@:将1行"1"变成101行数字序列:1\r 2\r 3\r ... 101

9. 分屏

vim -On file1 file2 ...:打开若干文件,并垂直分屏
vim -on file1 file2 ...:打开若干文件,并水平分屏
:new:创建空白水平分屏
:vsplit(:vsp) <file>:创建垂直分屏,并打开文件<file>,默认为当前文件
:sp(split) <file>:创建水平分屏,并打开文件<file>,默认为当前文件
 
基本都是<C-W>然后加上某一个按键字母,触发一个功能
<C-W> c/q或:q:关闭当前窗口
<C-W> o或:only:关闭所有其他窗口
<C-W> s/v:水平/垂直分屏当前文件
 
<C-W> h/j/k/l:移动光标到左/下/上/右边分屏
<C-W> w:移动光标到顺序下一个分屏
 
<C-W> H/J/K/L:移动分屏到左/下/上/右边
<C-W> =:所有分屏大小相等
<C-W> +/-:增加/减少分屏高度
<C-W> >/<:增加/减少分屏宽度

10. 系统设置命令

在Normal模式下使用[:set xxx]设置开启,使用[:set noxxx]设置关闭,也可写在~/.vimrc文件中(文件中不要冒号[:])
syntax enable
syntax on
set ic                  "忽略大小写(ignore case)
set noic               "不忽略大小写
set nu               "显示行号     
set hlsearch
set expandtab      "设置tab 
set shiftwidth=4   "设置tab的间隔 
set ts=4               "四个空格代表一个tab(tabstop)
set ai                   "设置自动缩进(autoindent)  
set ls=2               "总是显示文件名(也可以用 Ctrl+G 或 :f)
 
上一篇:vi/vim命令详解


下一篇:【vim】保存文件没有权限 :w !sudo tee %