快捷键和常用命令
- 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跳到上一个折叠处;zienable/disable fold;
11.帮助
:helpor:h进入帮助<C-]>进入一个主题<C-T>或者<C-O>返回:helpor:h 主题进入一个帮助主题:help word,接着键入CTRL-D可以看到匹配”word”的帮助主题。也可用:helpgrep word。:map查询所有map:map <key>查询此快捷键
12.垂直编辑
<C-v>进入垂直可视化模式<S-i>or<S-a>插入模式,然后插入你想要的字符,最后按两次ESC,即可完成垂直批量编辑d删除c替换
13.查看环境变量设置等等
:abbreviatelist abbreviations:argsargument list:augroupaugroups:autocmdlist auto-commands:bufferslist buffers:breaklistlist current breakpoints:cabbrevlist command mode abbreviations:changeschanges:cmaplist command mode maps:commandlist commands:compilerlist compiler scripts:digraphsdigraphs:fileprint filename, cursor position and status (like Ctrl-G):filetypeon/off settings for filetype detect/plugins/indent:functionlist user-defined functions (names and argument lists but not the full code):function Foouser-defined function Foo() (full code list):highlighthighlight groups:history ccommand history:history =expression history:history ssearch history:historyyour commands:iabbrevlist insert mode abbreviations:imaplist insert mode maps:introthe Vim splash screen, with summary version info:jumpsyour movements:languagecurrent language settings:letall variables:let FooBarvariable FooBar:let g:global variables:let v:Vim variables:listbuffer lines (many similar commands):lmaplanguage mappings (set by keymap or by lmap):lsbuffers:ls!buffers, including “unlisted” buffers:map!Insert and Command-line mode maps (imap, cmap):mapNormal 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:marksmarks:menumenu items:messagesmessage history:nmapNormal-mode mappings only:omapOperator-pending mode mappings only:printdisplay buffer lines (useful after :g or with a range):regregisters:scriptnamesall scripts sourced so far:set allall options, including defaults:setglobalglobal option values:setlocallocal option values:setoptions with non-default value:set termcaplist terminal codes and terminal keys:smapSelect-mode mappings only:spellinfospellfiles used:syntaxsyntax items:syn synccurrent syntax sync mode:tabstab pages:tagstag stack contents:undolistleaves of the undo tree:verboseshow info about where a map or autocmd or function is defined:versionlist version and build options:vmapVisual and Select mode mappings only:winposVim window position (gui):xmapvisual 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