Skip to content

lhjzzu/vim-document

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 

Repository files navigation

命令汇总

总结下列章节中常用的vim命令

<Esc>        按退出键
<CR>         按回车键,也写作<Enter>
<Ctrl>       按控制键
<Tab>        按制表键
<S-Tab>      同时按<Shift>和<Tab>
<Up>         按上光标键
<Down>       按下光标键
目的                    操作                  重复     回退
做出一个修改             {edit}                 .      u
在行内查找下一指定字符     f{char}                ;      ,
在行内查找上一指定字符     F{char}                ;      ,
在文档中查找下一处匹配项   /pattern<CR>           n      N
在文档中查找上一处匹配项   ?pattern<CR>           n      N
执行替换                :s/target/replacement  &      u
执行一系列修改           qx{changes}q           @x     u  

.      重复
u      撤销
0      行头
^      行头(非空白字符)
I      行头并进入插入模式
$      行尾(依然处于普通模式)
A      行尾并进入插入模式
a      在光标后进入插入模式
i      在光标前进入插入模式
x      删除光标下字符(普通)
s      删除光标下字符(插入)
*      高亮光标下内容 (整个文档)
gg     整个文档顶部
G      整个文档底部
zz     重绘屏幕,把当前行显示在正中
{num}G 跳转到num行
    
w             正向移动到下一单词的开头
W             正向移动到下一单词的开头(跳过单词间的符号)
b             反向移动到当前单词/上一单词的开头
B             反向移动到当前单词/上一单词的开头(跳过单词间的符号)
e             正向移动到当前单词/下一单词的结尾
ge            反向移动到上一单词的结尾   
{count}<C-a>  对该行从光标位置下开始的第一个数字数字加count 
{count}<C-x>  对该行从光标位置下开始的第一个数字数字减count  

操作 = 操作符 + 动作命令
操作符
c             修改
d             删除
y             复制到寄存器
g~            反转大小写
gu            转换为小写
gU            转换为大写
>             增加缩进
<             减小缩进
=             自动缩进
!             使用外部程序过滤{motion}所跨越的行

操作
dd            删除当前行
>>            缩进当前行
gUU           大写当前行
dl            删除一个字符
daw           删除一个单词
dap           删除一个段落
<C-h>               删除前一个字符(同退格键)
<C-w>               删除前一个单词
<C-u>               删至行首
<C-[>               切换到普通模式
<C-“o>               切换到插入-普通模式
<Esc>               切换到普通模式

<C-v>{123}          以十进制字符编码插入字符
<C-v>u{1234}        以十六进制字符编码插入字符
<C-v>{nondigit}     按原义插入非数字字符
<C-k>{char1}{char2} 插入以二合字母{char1}{char2}表示的字符
ga                  会显示出光标所在位置的字符的编码
r                   只替换当前光标下的字符
R                   进入替换模式

可视模式下选中的文本,可以用c,d,y等等操作命令对选中的文本进行操作

v          字符文本可视模式
V          行文本可视模式
<C-v>      块文本可视模式
<C-g>      从可视模式切换到选择模式(选择模式输入任何字符,替换掉选择的内容)
gv         选择上次的高亮选区
o          切换选区的活动端
h,j,k,l    这些方向键也可以调整选择的范围
f{char}/b  移动命令可以调整选择的范围
it         选中标签内的文本对象

:                               进入命令行模式
/                               进入查找模式
:[range]delete [x]              删除指定范围内的行[到寄存器x中]
:[range]yank [x]                复制指定范围的行[到寄存器x中]
:[line]put [x]                  在指定行后粘贴寄存器x中的内容
:[range]copy {address}          在指定范围内的行拷贝到{address}所指定的行之下
:[range]t{address}              在指定范围内的行拷贝到{address}所指定的行之下
:[range]move {address}          在指定范围内的行移动到{address}所指定的行之下
[range]m{address}               在指定范围内的行移动到{address}所指定的行之下
:[range]join                    连接指定范围内的行
:[range]normal {commands}       对指定范围的每一行执行普通模式下的命令{commands}
:[range]substitute/{pattern}    把指定范围的出现{pattern}的地方替换成{string}
/{string}/[flags]              
:[range]global/{pattern}/[cmd]  对指定范围内匹配{pattern}的所有行,在其上执行Ex命令{cmd}

@:                              普通模式下执行,重复上次的Ex命令
<C-d>                           让Vim显示可用的补全列表
<Up>/<Down>                     向上/下对历史Ex命令进行回溯
q:                              从普通模式下进入命令行窗口
q/                              打开查找命令历史的命令行窗口
<Ctrl-f>                        从命令行模式切换到命令窗口

range的定义
1      文件的第一行
$      文件的最后一行
0      虚拟行,位于文件第一行上方
.      光标所在行
%      整个文件(:1,$的简写形式)
'm     包含位置标记m的行
'<     高亮选区的起始行
'>     高亮选区的结束行
1,5    表示range第1行到第5行

vim {pattern}           载入所有匹配{pattern}的文件
:ls                     列举出所有被载入内存中的缓冲区的列表
:bnext                  切换到下一个缓冲区
:bprev                  切换到上一个缓冲区 
:bfirst                 切换到第一个缓冲区 
:blast                  切换到最后一个缓冲区
:buffer N               切换到第N个缓冲区
:bdelete N1 N2 N3       删除N1,N2,N3...等等缓冲区
:N,M bdelete            删除N到M之间的缓冲区(N,M也包括)
:w[rite]                把缓冲区内容写入磁盘
:wa[ll]!                把所有改变的缓冲区写入磁盘
:e[dit]!                把磁盘文件内容读入缓冲区(即回滚所做的修改)
:qa[ll]!                关闭所有窗口,摒弃所有修改而无需警告

<C-w>s                  水平切分当前窗口,新窗口仍然显示当前缓冲区
<C-w>v                  垂直切分当前窗口,新窗口仍然显示当前缓冲区
:sp[lit] {file}         水平切分当前窗口,并在新窗口载入{file}
:vsp[lit] {file}        垂直切分当前窗口,并在新窗口载入{file}

<C-w>w                  在窗体间循环切换
<C-w>h                  切换到左边的窗体
<C-w>j                  切换到下边的窗体
<C-w>k                  切换到上边的窗体
<C-w>l                  切换到右边的窗体

:clo[se]                关闭活动窗口
:on[ly]                 只保留活动窗口,关闭其他窗口
<C-w>c                  关闭活动窗口
<C-w>o                  只保留活动窗口,关闭其他窗口

<C-w>=                  使所有窗口等宽、等高
<C-w>_                  最大化活动窗口的高度
<C-w>|                  最大化活动窗口的宽度
[N]<C-w>_               把活动窗口的高度设置为[N]行
[N]<C-w>|               把活动窗口的宽度设置为[N]行

:tabe[dit]  {filename}  在新标签页中打开{filename} 
<C-w>T                  把当前窗口移到一个新标签页
:tabc[lose]             关闭当前标签额及其中的所有窗口
:tabo[nly]              只保留活动标签页,关闭所有其他标签页

:tabn[ext] {N}          切换到编号为{N}的标签页
:tabn[ext]              切换到下一个标签页
:tabp[revious]          切换到上一个标签页

{N}gt                   切换到编号为{N}的标签页
gt                      切换到下一个标签页
gT                      切换到上一个标签页

:tabmove[N]             重排标签页,N为0移动当前标签页到开头。缺省时,到结尾

:edit path                     打开指定路径下的文件
:edit %<Tab>                   % 代表活动缓冲区的完整文件路径
:edit %:h<Tab>                 :h 会去除文件名,但保留路径中的其他部分
:!mkdir -p path                -p参数使mkdir创建任何不存在的中间目录
:write                         写入磁盘               
:w !sudo tee % > /dev/null     超级用户权限保存文件

j                    向下移动一个实际行
gj                   向下移动一个屏幕行
k                    向上移动一个实际行
gk                   向上移动一个屏幕行
0                    移动到实际行的行首
g0                   移动到屏幕行的行首
^                    移动到实际行的第一个非空白字符
g^                   移动到屏幕行的第一个非空白字符
$                    移动到实际行的行尾
g$                   移动到屏幕行的行尾

选择区域范围-> 作为动作  (操作 = 操作符 + 动作)
a)或ab               一对圆括号(选中圆括号及内部内容)
i)或ib               圆括号内部
a}或aB               一对花括号(选中花括号及内部内容)
i}或iB               花括号内部
a]                  一对方括号
i]                  方括号内部
a>                  一对尖括号
i>                  尖括号内部
a'                  一对单引号
i'                  单引号内部
a"                  一对双引号
i"                  双引号内部
a`                  一对反引号
i`                  反引号内部
at                  一对XML标签 <xml>tags</xml>
it                  XML标签内部 tags

iw                当前单词
aw                当前单词及一个空格
iW                当前字串
aW                当前字串及一个空格
is                当前句子
as                当前句子及一个空格
ip                当前段落
ap                当前段落及一个空行


m{a-zA-Z}         会用选定的字母标记当前光标所在位置。小写位置标记只在每个缓冲区里局部可见,而大写位置标记则全局可见
`{mark}           跳到位置标记所在行
‘{mark}           把光标移动到设置此位置标记时光标所在的位置

vim的自动位置标记
``                上次跳转动作之前的位置(当前文件中)
`.                上次修改的地方
`^                上次插入的地方
`[                上次修改或复制的起始位置
`]                上次修改或复制的结束位置
`<                上次高亮选区的起始位置
`>                上次高亮选区的结束位置

%                 命令允许我们在一组开闭括号`(),{},[]`之间跳转

surrond.vim 插件
S"                给被选中的文字加双引号
S)                给被选中的文字加括号
S}                给被选中的文字加大括号
[count]G                跳转到指定的行号
%                       跳转到匹配的括号所在之处
(                       跳转到本句或上一句的开头
)                       跳转到下一句的开头
{                       跳转到本段或上一段的开头
}                       跳转到下一段的开头
H/M/L                   跳转到屏幕正上方/正中间/最下方
gf                      跳转到光标下的文件名所在文件
<C-]>                   跳转到光标下的关键字的定义之处
‘{mark}/`{mark}         跳转到一个位置标记


"{register}操作                        "{register}指定要用的寄
                                       存器,若不指明,vim将缺省使用无名寄存器。
"{register}                            作为前缀指定要使用的寄存器,但同时会覆盖无名寄存器                                       
""                                     代表无名寄存器
"a到"z                                 总共26个有名寄存器
"_d{motion}                            这种方式删除的内容会进入到黑洞寄存器中,有去无回
x s d{motion} c{motion} y{motion}      会覆盖无名寄存器内容
y{motion}                              不仅会把内容复制到无名寄存器中,也复制到名为"0的复制专用寄存器中

//了解
"%                                     当前文件名寄存器
"#                                     轮换文件名寄存器
".                                     上次插入的文本寄存器
":                                     上次执行的Ex文本寄存器
"/                                     上次查找的模式寄存器

p                                   寄存器中的内容是字符时,把寄存的内容粘贴到光标之后
P(大写)                              寄存器中的内容是字符时,把寄存的内容粘贴到光标之前
p                                   寄存器中的内容是一行时,把寄存的内容粘贴到行之后
P(大写)                              寄存器中的内容是一行时,把寄存的内容粘贴到行之前

:set paste                             启用系统剪切
command + v                            启用系统剪切,通过这个命令将系统剪切板的内容粘贴到vim中
:set paste!                            使用完后,关闭系统剪切

宏允许我们把一段修改用程序保存下来

录制宏
q{register}       开始录制时,指定一个用于保存宏的寄存器。
{changes}         一系列的修改
q                 录制完成,停止录制(这两者之间的所有命令都被宏捕获记录)

执行宏
qa{changes}q      将一系列的命令录制到寄存器a中
@a                回放寄存器a中的宏(录制的某条命令执行失败时,将中断执行)
@@                回放上一次的宏

编辑宏
:put a            把寄存器a中的宏的内容输出到光标所在位置的下一行,然后就可以像普通文本一样进行编辑
"ay$              面向字符的复制,把编辑好的行除结尾的回车符之外的内容复制到寄存器a中

:set ignorecase     全局设置Vim的查找模式将不区分大小写。但会影响vim的自动补全行为(大写字母将会被补全成小写字母)
/{pattern}\c        单次查找,让查找模式忽略大小写(忽略全局的ignorecase)
/{pattern}\C        单次查找,让查找模式区分大小写(忽略全局的ignorecase)
/-v{pattern}        激活very magic搜索模式,即假定除`_`,大小写字符以及0到9之外的字符都具有特殊含义.

/-V{pattern}        即可启用very nomagic原义开关,忽略字符的特殊含义。查找`.`, `?`,`*`等等具有特殊含义的字符时,打开原义开关-V。

/                          是正向查找提示符
?                          是反向查找提示符
n                          重复上一次查找,与上次查找方向相同 
N                          重复上一次查找,与上次查找方向相反
/{pattern}<CR>             Vim会从当前光标位置向文档下方扫描,然后到达底部后,再从顶部扫描到光标位置
wrapscan                   关闭`wrapscan`后,Vim只会从当前光标位置扫描到文档底部结束。
:set hlsearch              高亮查找到的内容
:set nohlsearch            关闭高亮功能
:set incsearch             时时更新预览内容,把第一个匹配处高亮起来
<C-r><C-w>                 incsearch开启时,没有输入完整的查找内容时,可用这个命令进行补全

:%s/{pattern}//gn          统计字符串{pattern}的匹配个数,n抑制正常的替换工作
/{pattern}/e<CR>           查找字符串,并将光标偏移到字符串结尾

:[range]s[ubstitute]/{pattern}/{string}/[flags]   替换命令语法
g                                                 该标志位,使得subsititute命令在全局范围内执行
c                                                 该标志位,让我们有机会可以确认或拒绝每一处修改
n                                                 该标志位,会抑制正常的替换行为
e                                                 该标志位,会屏蔽报错提示,例如找不到模式时,错误信息E486:找不到模式

s/{pattern}/{string}                              替换当前行的第一处的匹配
s/{pattern}/{string}/g                            替换当前行的所有的匹配
%s/{pattern}/{string}/g                           替换所有行的所有的匹配

标志位c的选项
y                                                 替换此处匹配
n                                                 忽略此处匹配
q                                                 提出替换过程
l                                                 "last" -- 替换此处后退出
a                                                 "all" -- 替换此处与之后所有的匹配
<C-e>                                             向上滚动屏幕
<C-y>                                             向下滚动屏幕
<C-r>{register}                                   命令行下,可以将寄存器的内容插入到命令行
%s//<C-r>0/g                                      将寄存器0中的内容放到替换域

:global命令允许我们在某个指定模式的所有匹配行上运行Ex命令。

:[range] global[!] /{pattern}/[cmd]        global语法命令,执行分为两个过程,第一轮 对`[range]`范围内的行进行标记,第二轮对每个标记的行执行`[cmd]`

[range]                                     range缺省情况下,:global的作用范围是整个文件(%)
[cmd]                                       可以是除了:global命令之外的任何Ex命令。缺省时使用`:print`
:global!或者:vglobal                         反转:global的行为。即为在没有匹配到模式的行执行[cmd]命令

:g/{pattern}/d                              在所有匹配`{pattern}`的行执行`d`命令,从而删除所有匹配的行
:v/{pattern}/d                              在所有不匹配`{pattern}`的行执行`d`命令,从而删除所有不匹配的行

ctags是一个外部程序,它通过扫描代码库,生成关键字。

$ctags {pattern}                为匹配到的文件建立建立一个名为tags的纯文本文件,内容是生成的关键字索引

<C-]>                           光标将会从当前所在的关键字跳转到它的定义处。
g<C-]>                          如果有多处匹配,`g<C-]>`会把所有匹配项列举出来供我们选择
<C-t>                           光标将会回到跳转前光标所在的位置
:tag {keyword}                  相当于 <C-]>
:tjump {keyword}                相当于 g<C-]>的功能

vim调用外部编译器,从而省去了离开编辑器的麻烦

不必离开Vim也能调用grep

在插入模式下,vim的自动补全会被自动触发
vim会根据当前的会话内缓冲区的所有内容创建一份补全列表

触发Vim自动补全的方法总结
<C-n>                              普通关键字
<C-x><C-n>                         当前缓冲区关键字
<C-x><C-i>                         包含文件关键字
<C-x><C-]>                         标签文件关键字
<C-x><C-k>                         字典查找
<C-x><C-l>                         整行补全
<C-x><C-f>                         文件名补全
<C-x><C-o>                         全能(Omni)补全

当拼写检查器被启用后,Vim会对所有未在拼写文件中出现过的单词进行标记。

:set spell                           进行拼写检查,拼写错误的单词会被标记出来
]s                                   跳到下一处拼写错误
[s                                   跳到上一处拼写错误
z=                                   为当前单词提供更正建议
zg                                   把当前单词添加到拼写文件中
zw                                   把当前单词从拼写文件中删除
zug                                  撤销针对当前单词的zg,zw命令

其他

多行注释
1. <C-v> j/k                  可视块选中要注释的行
2. I #                        I移动光标到行首并进入插入模式,添加#注释符
3. <Esc>                      退出插入模式,并自动将所有的行添加上注释

取消多行注释

1. <C-v> j/k                  可视块模式选中要去除的注释符(#)
2. d                          删除所有的注释符#  

About

this is a series of sample documents about vim

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published