快捷键和常用命令
- 1.编辑
- 2.剪贴板
- 3.缓冲区
- 4.移动和跳转
- 5.窗口操作
- 6.搜索和替换
- 关于搜索的正则表达式
- 字符
- 特殊符号
- 数量
- 位置
- 例子
- 搜索
- 替换
vimgrep
在文件中搜索
- 关于搜索的正则表达式
- 7.tab操作
- 8.关键字补全
- 9.netrw模式
- 10.折叠
- 11.帮助
- 12.垂直编辑
- 13.查看环境变量设置等等
- 14.标记
- 15.执行shell命令
- 16.关于动作的影响
1.编辑
i
在光标的字之前a
在光标的字之后I
在光标的行首A
在光标的行尾s
删除光标所在行S
删除整行u
撤销ctrl + r
反撤销x
向后删除X
向前删除c
替换单词C
替换整行d + w
删除光标右边的单词, 而且在黏贴板 按p可以粘贴出来dd
删除一行,光标所在的行行数dd
删除指定数量的行r
替换o
在当前行的下面插入一行O
在当前行的上面插入一行- “多次重复插入字符,比如 3i 然后输入单词go 再按esc就可以得到 gogogo”
guu
小写(行)gUU
大写(行)g~~
翻转大小写(行)- 选中后用o可以在选中文字的前后跳转
>>
向右给它进当前行<<
向左缩进当前行=
缩进当前行 (和上面不一样的是,它会对齐缩进)=%
把光标位置移到语句块的括号上,然后按=%,缩进整个语句块(%是括号匹配)G=gg
或gg=G
缩进整个文件(G是到文件结尾,gg是到文件开头)>G
从所在行到文件结束进行缩进:read file
将外部文件读入当前buffer:read !ls -alsh
将外部命令的结果读入到当前buffer
2.剪贴板
yy
复制一行行数yy
复制一行多次p
粘贴粘贴板的第一个数字p
粘贴粘贴板的第N个:reg
查看剪贴板内的内容
3.缓冲区
:ls
查看缓冲区所有文件- 用
:ls
以后,在文件的前面会有一些标记–
(非活动的缓冲区)a
(当前被激活缓冲区)h
(隐藏的缓冲区)%
(当前的缓冲区)#
(交换缓冲区)=
(只读缓冲区)+
(已经更改的缓冲区)
- 用
:buffer [num]
或者:buffer src/http/ngx_http.c
直接切换缓冲区文件num<C-^>
同上:bnext
缩写 :bn:bprevious
缩写 :bp:blast
缩写 :bl:bfirst
缩写 :bf:cd xx
切换:pwd
查看工作目录
4.移动和跳转
M
当前屏幕中间L
底部H
顶部G
文件底部,gg
文件顶部h
向左j
向下k
向上l
向右ctrl + f
翻页 向前ctrl + b
翻页 向后ctrl + d
翻页 向前半页ctrl + u
翻页 向后半页0
移动到行首$
移动到行尾^
移动到当前第一个非空字符%
移动到对应括号w
下一个worde
到word的结尾b
上一个word- ” 所有的移动都可以在前面加上数字来多次移动 比如3w 2b 9l “
数字gg
移动到指定的行gg
移动到0行G
移动到尾行gt
下一个tabgT
上一个tab<C-E>
向下滚屏<C-Y>
向上滚屏zz
让你的光标在屏幕最中间<C-o>
跳转上一个文件f{char}
向前查找出现字符的地方F{char}
向后查找出现字符的地方t{char}
同f,但是光标在字符左侧-
T{char}
同F,但是光标在字符右侧 :jumps
查看jump列表g;
条状到上一个跳转位置,可以加count-
g,
跳转到下一个编辑的位置,可以加count <C-i>
向前, 在jumplist里跳转-
<C-O>
向后, 在jumplist里跳转 -
<C-]>
跳转tags stack <C-z>
跳回shell,再次输入fg可以回到vim
5.窗口操作
<C-W>v
水平拆分<C-W>s
垂直拆分<C-w>|
最大化水平窗口<C-w>_
最大化垂直窗口<C-w>-
垂直减少1行,可以加数字之后跟-
<C-w>=
平均分窗口<C-w>+
垂直增加1行,可以在数字之后跟+
:vertical resize 数字
或者:vertical resize +|-数字
来重置当前窗口的大小 *:Ex
打开目录:Sex
在垂直分割的窗口中打开目录:Vex
在水平分割的窗口中打开目录<C-w> + hjkl
分屏切换,按照给定的方向:He
:He!
全称为 :Hexplore,在下边分屏浏览目录,加!在上分屏浏览目录:Ve
:Ve!
全称为 :Vexplore 在左边分屏浏览目录,加!在右分屏浏览目录:set scb
:set scb!
同步分屏或者取消
6.搜索和替换
:首行,尾行 s/str1/str2/g
在指定的范围里搜索并替换g*
查找光标所在单词的字符序列s:
substitute 替换
关于搜索的正则表达式
关于指令和作用以及对结果的处理
字符匹配
.
匹配任意一个字符[abc]
匹配方括号中的任意一个字符。可以使用-表示字符范围,- 如[a-z0-9]匹 配小写字母和阿拉伯数字。
[^abc]
在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。\d
匹配阿拉伯数字,等同于[0-9]。\D
匹配阿拉伯数字之外的任意字符,等同于[^0-9]
\x
匹配十六进制数字,等同于[0-9A-Fa-f]\X
匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]
\w
匹配单词字母,等同于[0-9A-Za-z_]
\W
匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
\t
匹配<TAB>
字符\s
匹配空白字符,等同于[ \t]
\S
匹配非空白字符,等同于[^ \t]
符号
\*
匹配 * 字符\.
匹配 . 字符\/
匹配 / 字符\\
匹配 \ 字符\[
匹配 [ 字符
数量
*
匹配0-任意个\
匹配1-任意个\?
匹配0-1个\{n,m}
匹配n-m个\{n}
匹配n个\{n,}
匹配n-任意个\{,m}
匹配0-m个
位置
$
匹配行尾^
匹配行首\<
匹配单词词首\>
匹配单词词尾
搜索
*
和#
分别是查找下一个和上一个光标下的字符/
是搜索,s
是替换, 搜索的前面加上g以后后面要跟处理方式/ + word
/word\c
开始搜索, 加\c
是指大小写敏感的查找,/\cworkd
也可以\c
大小写不敏感,\C
大小写敏感/word/数字
搜索之后定位都指定的位置offset,注意这里是行,可以加减/word/-2
/word/e
搜索之后定位到最后/word/e+1
搜索之后光标定位到最后一个出现的位置的右侧1个位置,反之/word/e-1
是左侧一个位置/word/b
同上,移动到第一个,后面可以可以跟+1
或者-1
//
重复上一个搜索,后面可以加参数e,b和数字
? + word
反向搜索n
下一个N
上一个:nohl
:noh
或者:nohlsearch
搜索结束后,去除高亮.- 模糊搜索
/word*
这里要注意*
代表后面可以出现任意字符,而/a*
不是,是指a出现0次或者多次,所以会匹配全局,也就是说单个单词的时候比较特殊,/a*
等同于/\(a\)*
这个要注意 单个单词的时候意义不一样/\(ab\)*
匹配”ab”, “abab”, “ababab”,/ab+
匹配”ab”, “abb”, “abbb”,b有1个或者多个/ascb\=
匹配”asc”和”ascb”等同于/ascb\{0,1}
/asc\{0,3}
c出现0,1,2,3次都可以\{,4}
0, 1, 2, 3 or 4\{3,}
3, 4, 5, etc.\{0,1}
0 or 1, same as =\{0,}
0 or more, same as *\{1,}
1 or more, same as +\{3}
3\{-}
最小化匹配,带-
都是非贪婪模式,优先匹配最小,最短的/word\{-1,3}
非贪婪模式
替换
%
的意思就是1,$
从头到尾.
是当前行
帮助里的解释:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
, 也就是:[范围]s/表达式/字符串/[标识符][数量]
,
标识符
是用来定义替换处理的一些参数的,如是否需要确认,
&
使用上一个模式,必须在第一个位置c
替换的时候需要确认g
全部替换e
如果出现错误,不要显示错误信息i
大小写不敏感I
大小写敏感n
打印有多少匹配,而不真正替换,c
就会被忽略p
打印最后一个匹配的行#
同p
加上行号l
同p
但是以:list
的方式打印r
只有在配合:&
或者:s
没有任何参数的时候使用
vimgrep 在文件中(files)查找
语法:vim[grep] /{partern}/[g][j] fileregx
没有参数g的话,则行只查找一次关键字.反之会查找所有的关键字.
没有参数j的话,查找后,VIM会跳转至第一个关键字所在的文件.反之,只更新结果列表(quickfix).
示例
:vimgrep /pip/ **/*.md
查找完毕以后,可以用:copen
来在quickfix里列出结果
7.tab操作
:tabnew
打开新的tab,可以加参数:tabedit
新tab编辑,可以加参数:tabfirst
:tablast
:tabonly
:tabfind
:tabnext
:tabprevious
8.关键字补全
<C-n>
Vim就开始搜索所有文件里出现的词,搜索完成了就会出现一个下拉列表<C-p>
配合<C-n>
回到刚输入的地方进行补全Ctrl + X
和Ctrl + D
宏定义补齐Ctrl + X
和Ctrl + ]
是Tag 补齐Ctrl + X
和Ctrl + F
是文件名 补齐Ctrl + X
和Ctrl + I
也是关键词补齐,但是关键后会有个文件名,告诉你这个关键词在哪个文件中Ctrl + X
和Ctrl +V
是表达式补齐Ctrl + X
和Ctrl +L
这可以对整个行补齐,变态吧。
9.netrw模式
<F1>
netrw 给出帮助<cr>
netrw 进入目录或者打开文件<del>
netrw 试图删除文件/目录-
netrw 往上一层目录a
切换普通显示方式、隐藏方式 (不显示匹配 g:netrw_list_hide 的文件) 和显示方式 (只显示匹配 g:netrw_list_hide 的文件)c
使浏览中的目录成为当前目录C
设置编辑窗口d
建立新目录D
试图删除文件/目录gb
切换到收入书签的目录gh
快速隐藏/显示点文件<c-h>
编辑文件隐藏列表i
在瘦、长、宽和树状列表方式循环<c-l>
使 netrw 刷新目录列表mb
把当前目录加入书签mc
把带标记文件复制到标记目标目录中md
对带标记文件进行比较 (不超过 3 个)me
把带标记文件放到参数列表中并编辑之mf
标记文件mh
切换带标记文件的后缀在隐藏列表中的存在与否mm
把带标记文件移动到标记目标目录中mp
打印带标记文件mr
标记满足 shell 风格的|regexp|
的文件mt
使当前浏览目录成为标记文件的目标目录mT
对带标记文件应用 ctagsmu
撤销所有带标记文件的标记mx
对带标记文件应用任意外壳命令mz
对带标记文件压缩/解压缩o
用水平分割在新浏览窗口中进入光标所在的文件/目录O
获取光标指定的文件p
预览文件P
在前次使用的窗口中浏览qb
列出书签内的目录和历史qf
显示文件信息r
反转排序顺序R
给指定的文件或目录换名s
选择排序风格: 按名字、时间或文件大小S
指定按名排序时的后缀优先级t
在新标签页里进入光标所在的文件/目录u
切换到较早访问的目录U
切换到较迟访问的目录v
用垂直分割在新浏览窗口中进入光标所在的文件/目录x
用指定程序阅读文件X
用|system()|
执行光标所在的文件%
在 netrw 当前目录打开新文件
10.折叠
zf
创建折叠的命令,可以在一个可视区域上使用该命令;zd
删除当前行的折叠;zD
删除当前行的折叠;zfap
折叠光标所在的段;zo
打开折叠的文本;zc
收起折叠;za
打开/关闭当前折叠;zr
打开嵌套的折行;zm
收起嵌套的折行;zR
(zO) 打开所有折行;zM
(zC) 收起所有折行;zj
跳到下一个折叠处;zk
跳到上一个折叠处;zi
enable/disable fold;
11.帮助
:help
or:h
进入帮助<C-]>
进入一个主题<C-T>
或者<C-O>
返回:help
or:h 主题
进入一个帮助主题:help word
,接着键入CTRL-D
可以看到匹配”word”的帮助主题。也可用:helpgrep word
。:map
查询所有map:map <key>
查询此快捷键
12.垂直编辑
<C-v>
进入垂直可视化模式<S-i>
or<S-a>
插入模式,然后插入你想要的字符,最后按两次ESC
,即可完成垂直批量编辑d
删除c
替换
13.查看环境变量设置等等
:abbreviate
list abbreviations:args
argument list:augroup
augroups:autocmd
list auto-commands:buffers
list buffers:breaklist
list current breakpoints:cabbrev
list command mode abbreviations:changes
changes:cmap
list command mode maps:command
list commands:compiler
list compiler scripts:digraphs
digraphs:file
print filename, cursor position and status (like Ctrl-G):filetype
on/off settings for filetype detect/plugins/indent:function
list user-defined functions (names and argument lists but not the full code):function Foo
user-defined function Foo() (full code list):highlight
highlight groups:history c
command history:history =
expression history:history s
search history:history
your commands:iabbrev
list insert mode abbreviations:imap
list insert mode maps:intro
the Vim splash screen, with summary version info:jumps
your movements:language
current language settings:let
all variables:let FooBar
variable FooBar:let g:
global variables:let v:
Vim variables:list
buffer lines (many similar commands):lmap
language mappings (set by keymap or by lmap):ls
buffers:ls!
buffers, including “unlisted” buffers:map!
Insert and Command-line mode maps (imap, cmap):map
Normal and Visual mode maps (nmap, vmap, xmap, smap, omap):map<buffer>
buffer local Normal and Visual mode maps:map!<buffer>
buffer local Insert and Command-line mode maps:marks
marks:menu
menu items:messages
message history:nmap
Normal-mode mappings only:omap
Operator-pending mode mappings only:print
display buffer lines (useful after :g or with a range):reg
registers:scriptnames
all scripts sourced so far:set all
all options, including defaults:setglobal
global option values:setlocal
local option values:set
options with non-default value:set termcap
list terminal codes and terminal keys:smap
Select-mode mappings only:spellinfo
spellfiles used:syntax
syntax items:syn sync
current syntax sync mode:tabs
tab pages:tags
tag stack contents:undolist
leaves of the undo tree:verbose
show info about where a map or autocmd or function is defined:version
list version and build options:vmap
Visual and Select mode mappings only:winpos
Vim window position (gui):xmap
visual mode maps only
14.标记
m{a-z}
标记光标所在位置,局部标记,只用于当前文件.m{A-Z}
标记光标所在位置,全局标记.标记之后,退出Vim, 重新启动,标记仍然有效.- `{a-z} 移动到标记位置.
- ‘{a-z} 移动到标记行的行首.
- `{0-9} 回到上[2-10]次关闭vim时最后离开的位置.
- ` 移动到上次编辑的位置.’‘也可以,不过``精确到列,而’‘精确到行 .如果想跳转到更老的位置,可以按
<C-o>
,跳转到更新的位置用<C-i>
. - `” 移动到上次离开的地方.
- `. 移动到最后改动的地方.
:marks
显示所有标记.:delmarks a b
删除标记a和b.:delmarks a-c
删除标记a、b和c.:delmarks a c-f
删除标记a、c、d、e、f.:delmarks!
删除当前缓冲区的所有标记.:help mark-motions
查看更多关于mark的知识.
15.执行shell命令
:!{program}
执行命令:r !{program}
执行命令并读取命令的输出,最常用的就是日期:r !date
- 补充一下,在n模式下,直接
!!date
,等同于:.!date
- 补充一下,在n模式下,直接
:w !{program}
执行命令并将文本作为命令的输入:[range]!{program}
过滤字符在命令里
16.关于动作的影响motions
a
全部alli
在内部insidet
直到tillf
向前find forwordF
向后find backword
例子
daw
删除整个单词yfg
知道出现g的地方复制,包含gdi[
删除整个[]
内的部分da[
删除整个[]
包含符号的部分
其它
:echo @%
当前文件:DiffOrig
查看当前文件和刚加载的时候的diff:diffoff
当前窗口关闭diff模式:ls
显示现有的buffer:cd ..
进入父目录:cd -
将目录切换到上一个目录,不是父目录:args
显示目前打开的文件:lcd %:p:h
更改到当前文件所在的目录!!date
插入时间日期:call mkdir('xx')
创建目录ga
查看光标处字符的ascii码g8
查看光标处字符的utf-8编码- 按
v
键进入选择模式,然后移动光标选择你要的文本,按u
转小写,按U
转大写 - 按
v
键进入选择模式,然后按h,j,k,l移动光标,选择文本,然后按y
进行复制,按p
进行粘贴. :set fenc
查看和设置文件编码:history c
查看命令执行的历史:history =
表达式历史:history s
查找历史:history
同history c