命令行输入
ctrl+a移动到当前行的开头ctrl+e移动到当前行的结尾ctrl+u擦除一行光标前面的部分ctrl+h擦除光标前面的一个字符ctrl+k清除光标到行尾的字符ctrl+w清除光标之前一个单词
vim基本用法:模式,光标移动,查找替换,复制粘贴删除
帮助
:help:help command
模式切换
- 命令模式 Esc, Ctrl-c, 配合光标移动可用Alt-h,Alt-j,Alt-k,Alt-l
- 编辑模式 i 在当前位置编辑 , a在当前位置后面插入,I在行首插入,A在行尾插入,o添加新行
- 可视化模式 v块模式,V行块模式,Ctrl-v列块模式
下面的操作方式和快捷键基本上都是在命令模式下的,编辑模式按键一般只能输入文字。
输入方式
- 直接按键盘编辑 如i
:command如:set nu- 执行shell命令
:!command如:!pwd
撤销,重做
- 撤销上一次的编辑操作
u, U - 撤销未保存的全部编辑操作,重新载入文件
:e! - 重做上一次撤销的编辑操作
ctrl-r
保存,退出
- 保存文件
:w - 关闭文件
:q - 保存并关闭文件
:wq - 不保存强制关闭文件
:q! - 关闭所有文件退出
:qa
移屏
- 下翻页
Ctrl-f - 上翻页
Ctrl-b - 下翻行
Ctrl-e - 上翻行
Ctrl-y
光标定位快捷键
- 到指定行
:行号,行号G - 到文件头
1G - 到文件尾
G - 左下上右
h,j,k,l - 下一个字
w,上一个字b - 到行首
^ - 到行尾
$ - 行尾插入
A,添加空行o
在函数中定位光标
[[转到上一个位于第一列的“{”]]转到下一个位于第一列的“{”{转到上一个空行}转到下一个空行
查找当前文件
n,N查找到key后,n跳到后一个位置,N跳到前一个位置* , #当前光标所在的词key作为关键字,精确匹配查找,相当于/<key>g*,g#当前光标所在的词key作为关键字,忽略大小写查找,相当于/key/key从当前光标位置开始向后查找key?key从当前光标位置开始向前查找key/\<key\>,?\<key\>精确匹配查找keyshift-*向下查找并高亮显示shift-#向上查找并高亮显示gd高亮显示光标所属单词,”n” 查找!:nohl取消高亮
普通查找
命令模式下,按’/’或’?’,然后输入要查找的字符,Enter。
/和?的区别是,一个向前(下)找,一个向后(上)。
全词匹配
如果你输入 /int,你也可能找到 print。 要找到以 int 结尾的单词,可以用:
/int\>
”>” 是一个特殊的记号,表示只匹配单词末尾。类似地,”<” 只匹配单词的开头。
一次,要匹配一个完整的单词 int,只需:
/\<int\>
批量替换
:%s/要被取代的字串/新的字串/g
replace with foo (y/n/a/q/l/^E/^Y)?
The “y” and “n” are self-explanatory, but what about the rest? To tell Vim to go ahead and replace all instances of the matched string, answer with a. If you realize that you don’t really want to make the changes, you can tell Vim to quit the operation using q. To tell Vim to make the current change and then stop, use l, for last.
^E and ^Y allow you to scroll the text using Ctrl-e and Ctrl-y.
复制粘贴删除
- 用
v选中文本之后可以按y进行复制,如果按d就表示剪切,之后按p进行粘贴。 - 复制行
yy复制n行nyy - 粘贴行
p - 删除行
dd删除n行ndd - 删除字
dw复制字yw - 全部删除:按esc后,然后
dG - 全部复制:按esc后,然后
ggyG :sp [filename]:在同一编辑窗打开第二个文件
可视块选择复制:
- 进入可视化模式
v,V,Ctrl-v - 可视化模式下,方向键选择块
- 按
y复制选择的块
代码折叠
zc折叠zC对所在范围内所有嵌套的折叠点进行折叠zo展开折叠zO对所在范围内所有嵌套的折叠点展开[z到当前打开的折叠的开始处。]z到当前打开的折叠的末尾处。zj向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。zk向上移动到前一折叠的结束处。关闭的折叠也被计入。
跳转位置
ctrl+i下一个跳转位置ctrl+o上一个跳转位置
vim 文件刷新
:e!to force-discard your local changes and reload from the disk.
配置:显示和编辑样式,配置文件
显示和编辑样式
- 在状态行显示文件名
set statusline+=%f,set laststatus=2 - 显示行号
:set nu隐藏行号:set nonu - 自动缩进
:set autoindent - c风格的缩进
:set cindent - 显示断行符等特殊符号
:set list
多行注释,多文件,多窗格编辑,保存会话
多行缩进:
按v进入visual状态,选择多行,用>或<缩进或缩出
多行注释
多行注释按键操作:
- 注释:Ctrl-v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I,再插入注释符比如”#”,按Esc(两下)就会全部注释了。
- 删除:Ctrl-v 进入列编辑模式,向下或向上移动光标,选中注释部分,按小写d,就会删除注释符号。
多行注释使用替换命令:
:%s/^/\/\//g来在全部内容的行首添加//号注释:2,50s/^/\/\//g在2~50行首添加//号注释- 反过来替换既是删除操作。
删除列
- 光标定位到要操作的地方。
CTRL+v:进入“可视块”模式,选取这一列操作多少行。d:删除。
插入列
插入操作的话知识稍有区别。例如我们在每一行前都插入”() “:
- 光标定位到要操作的地方。
CTRL+v:进入“可视 块”模式,选取这一列操作多少行。SHIFT+i(I):输入要插入的内容。ESC:按两次,会在每行的选定的区域出现插入的内容。
ctags代码跳转
!ctags -R生成索引:set tags=路径设定ctags生成的tags文件的路径Ctrl-]跳转到唯一的或者是第一个匹配的代码g+Ctrl-]提供多选列表ctrl+t回到跳转之前的标签处:tag {关键字}: ex命令版的Ctrl-]:tjump {关键字}: ex命令版的g+Ctrl-]:tag或:tjump /{关键字}:正则表达式搜索
NERDTree目录面板
切换工作台和目录
ctrl + w + h光标 focus 左侧树形目录ctrl + w + l光标 focus 右侧文件显示窗口ctrl + w + w光标自动在左右侧窗口切换ctrl + w + r移动当前窗口的布局位置o在已有窗口中打开文件、目录或书签,并跳到该窗口go在已有窗口 中打开文件、目录或书签,但不跳到该窗口t在新 Tab 中打开选中文件/书签,并跳到新 TabT在新 Tab 中打开选中文件/书签,但不跳到新 Tabisplit 一个新窗口打开选中文件,并跳到该窗口gisplit 一个新窗口打开选中文件,但不跳到该窗口svsplit 一个新窗口打开选中文件,并跳到该窗口gsvsplit 一个新 窗口打开选中文件,但不跳到该窗口!执行当前文件O递归打开选中 结点下的所有目录x合拢选中结点的父目录X递归 合拢选中结点下的所有目录eEdit the current dif双击相当于 NERDTree-o中键对文件相当于 NERDTree-i,对目录相当于 NERDTree-eD删除当前书签P跳到根结点p跳到父结点K跳到当前目录下同级的第一个结点J跳到当前目录下同级的最后一个结点k跳到当前目录下同级的前一个结点j跳到当前目录下同级的后一个结点C将选中目录或选中文件的父目录设为根结点u将当前根结点的父目录设为根目录,并变成合拢原根结点U将当前根结点的父目录设为根目录,但保持展开原根结点r递归刷新选中目录R递归刷新根结点m显示文件系统菜单cd将 CWD 设为选中目录I切换是否显示隐藏文件f切换是否使用文件过滤器F切换是否显示文件B切换是否显示书签q关闭 NerdTree 窗口?切换是否显示 Quick Help
切换标签页
:tabnew[++opt选项] [+cmd] 文件 建立对指定文件新的tab:tabc关闭当前的 tab:tabo关闭所有其他的 tab:tabs查看所有打开的 tab:tabp前一个 tab:tabn后一个 tab
标准模式下:
gT前一个 tabgt后一个 tab{i}gtgo to tab in position i
MacVim 还可以借助快捷键来完成 tab 的关闭、切换
cmd+w关闭当前的 tabcmd+{前一个 tabcmd+}后一个 tab
NerdTree 在 .vimrc 中的常用配置
” 在 vim 启动的时候默认开启 NERDTree(autocmd 可以缩写为 au)
autocmd VimEnter * NERDTree
” 按下 F2 调出/隐藏 NERDTree
map :silent! NERDTreeToggle
” 将 NERDTree 的窗口设置在 vim 窗口的右侧(默认为左侧)
let NERDTreeWinPos="right"
” 当打开 NERDTree 窗口时,自动显示 Bookmarks
let NERDTreeShowBookmarks=1
vim 撤销 回退操作
u撤销上一步的操作ctrl+r恢复上一步被撤销的操作
分屏
ctrl+w =:让左右上下各个分屏宽度,高度均等ctrl+w _(shift + -)当前屏幕高度扩展到最大ctrl+w |(shift + \)当前屏幕宽度扩展到最大ctrl+w c:关闭当前屏幕ctrl+w <:使得当前窗口宽度减 N (默认值是 1)ctrl+w >:使得当前窗口宽度加 N (默认值是 1)
窗口大小调整
纵向调整
ctrl+w +:纵向扩大(行数增加)ctrl+w -:纵向缩小 (行数减少):res(ize) num:例如::res 5,显示行数调整为5行:res(ize)+num:把当前窗口高度增加num行:res(ize)-num:把当前窗口高度减少num行
横向调整
:vertical res(ize) num:指定当前窗口为num列:vertical res(ize)+num:把当前窗口增加num列:vertical res(ize)-num:把当前窗口减少num列
移动分屏
Ctrl+W L:向右移动Ctrl+W H:向左移动Ctrl+W K:向上移动Ctrl+W J:向下移动
Ack代码查找
:Ack[!] [options] {pattern} [{directory}]Search recursively in {directory} (which defaults to the current directory) for the {pattern}. Behaves just like the |:grep| command, but will open the |Quickfix| window for you. If [!] is not given the first occurrence is jumped to.
打开查找结果文件
?a quick summary of these keys, repeat to closeoto open (same as Enter)Oto open and close the quickfix windowgoto preview file, keeping focus on the resultstto open in new tabTto open in new tab, keeping focus on the resultshto open in horizontal splitHto open in horizontal split, keeping focus on the resultsvto open in vertical splitgvto open in vertical split, keeping focus on the resultsqto close the quickfix window
vim-php-cs-fixer代码格式化
<leader>:代表键是“ , ”。The default leader is ‘', but many people prefer ‘,’ as it’s in a standardnnoremap <silent>pfd :call PhpCsFixerFixDirectory()<CR>nnoremap <silent>pff :call PhpCsFixerFixFile()<CR>
切换shell
:sh进入shellctrl+d返回vimnoremap <C-d> :sh<cr>使用ctrl+d来回切换shell和vim
VIM中进行文本替换
替换当前行中的内容
:s/from/to/(s即substitude):s/from/to/: 将当前行中的第一个from,替换成to。如果当前行含有多个from,则只会替换其中的第一个。:s/from/to/g: 将当前行中的所有from都替换成to。-
:s/from/to/gc: 将当前行中的所有from都替换成to,但是每一次替换之前都会询问请求用户确认此操作。注意:这里的from和to都可以是任何字符串,其中from还可以是正则表达式。
替换某一行的内容
:33s/from/to/g:.s/from/to/g: 在当前行进行替换操作。:33s/from/to/g: 在第33行进行替换操作。:$s/from/to/g: 在最后一行进行替换操作。
替换某些行的内容
:10,20s/from/to/g:10,20s/from/to/g: 对第10行到第20行的内容进行替换。:1,$s/from/to/g: 对第一行到最后一行的内容进行替换(即全部文本)。:1,.s/from/to/g: 对第一行到当前行的内容进行替换。:.,$s/from/to/g: 对当前行到最后一行的内容进行替换。:'a,'bs/from/to/g: 对标记a和b之间的行(含a和b所在的行)进行替换。其中a和b是之前用m命令所做的标记。
替换所有行的内容
:%s/from/to/g:%s/from/to/g: 对所有行的内容进行替换。
替换确认
:s/vivian/sky/gc: 顾名思意,c是confirm的缩写
DoxygenToolkit进行自动注释
:DoxAuthor:将文件名,作者,时间等:DoxLic:license注释:Dox:函数及类注释:DoxBlock:来插入一个注释块
设置配色方案
:colorscheme solarized:素雅 solarized:colorscheme molokai:多彩 molokai:colorscheme phd:复古 phd