vim操做备忘录
vim的书籍虽然看不很多,但是总是容易忘记,主要是本身操做总结过少,这个博客就主要用来记录一些比较常见的术语和操做,以防止本身再次忘记。
<leader>的含义
- <leader> 在vim中默认表示" \ "
- :let mapleader = “-” 能够经过如下命令修改为本身喜欢的键。
<c-p>
- 以<c-…开头的表示:ctrl + …按键一块儿按,例如<c-p> 就是ctrl + p 一块儿键入。
不加载任何vim插件,使用最原始的vim
vim -u NONE -N XXXX.CC
-u NONE 表示不加载.vimrc
-N vim nocompatible vi
windows下的插件均安装在xxxx\xxxx\vim80(版本号)\colors(以颜色主题为例)下
ubuntu下均在~/.vim/colors(以颜色为例),颜色主题启动均以colorscheme monokai 来启动。
ubuntu经过vundle进行管理,主体步骤.vimrc---->经过命令if filereadable(expand(xxx))找到vundle的配置文件,并source启动-------->.vim.bundles------------>set rtp+=xxxx\Vundle.vim 以及call vundle#begin(默认 .vim\bundle)寻找到各种插件
source xxx.vim 用于启动xxx.vim插件javascript
vim中经常使用配置
-
退格php
-
shiftwidth reindent 操做(<<和>>)时缩进的列数(这里的一列至关于一个空格)html
-
tabstop 一个tab键所占的列数,linux 内核代码建议每一个tab占用8列java
-
softtabstop 敲入tab键时实际占有的列数。python
-
expandtab 输入tab时自动将其转化为空格linux
-
通常用法 :set shfitwidth = 4 softtabstop = 4 expandtab 换行自动缩进4格,softtabstop表示键入tab按钮实际所占行数,本例所占4列,expandtab使得tab实际不知足所定义列数,则以空格来凑。web
-
filetype 根据文件后缀名来肯定文件所属类型,能够经过set filetype=cpp来强制制定文件所属类型。
:filetype on 打开 未改变 未改变
:filetype off 关闭 未改变 未改变
:filetype plugin on 打开 打开 未改变
:filetype plugin off 未改变 关闭 未改变
:filetype indent on 打开 未改变 打开
:filetype indent off 未改变 未改变 关闭
:filetype plugin indent on 打开 打开 打开
:filetype plugin indent off 未改变 关闭 关闭
要查看当前的状态,只需输入: >
:filetypeshell
-
查看不可见字符
:set invlist
:set nolistubuntu
-
windows 下的vim设置字体
c:\Program Files(x86)\Vim下的_vimrc 添加 set guifont=Consolas:h11
配置文件_vimrc与安装的插件文件夹colors不在一个文件中,其余均在Vim\vim80\ 之下vim
映射
- inoremap就只在插入(insert)模式下生效
- vnoremap只在visual模式下生效
- nnoremap就在normal模式下(狂按esc后的模式)生效
- 在vim打开文件norm6al模式下键入 :help nnoremap,得出如下提示
- :nn[oremap] {lhs} {rhs} |mapmode-n| :nn *:nnorem
- 在映射命令做用的模式中把键序列 {lhs} 映射为 {rhs}
- 以YouCompleteMe的映射跳转定义的使用用例以下:
- nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处
高效修改符号内的字符
ci’、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
di’、di"、di(或dib、di[、di{或diB、di< - 分别删除这些配对标点符号中的文本内容
yi’、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容
vi’、vi"、vi(、vi[、vi{、vi< - 分别选中这些配对标点符号中的文本内容
it : 选择xml标签内部内容,例如
tags
,高亮tags
at:选择一对xml标签,例如
tags
,高亮全部内容
将工做区分割成窗口
命令 |
用途 |
<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 |
切换到右边的窗口 |
Ex命令 |
普通模式命令 |
用途 |
:clo[se] |
<C-w>c |
关闭活动窗口| |
:on[ly] |
<C-w>o |
只保留活动窗口 |
命令 |
用途 |
<C-w>= |
使全部窗口等高等宽(经常使用于恢复) |
<C-w> - |
减小窗口中的一行 |
<C-w> + |
增长窗口中的一行 |
<C-w>_ |
最大化窗口中的行(高度) |
<C-w>| |
最大化窗口的列 |
[N]<C-w>_ |
窗口中的行(高度)设置为N |
[N]<C-w>| |
最大化窗口的列设置为N |
在标签中切换
浏览Quickfix列表
命令 |
用途 |
:cnext |
跳转到下一项 |
:cprev |
跳转到上一项 |
:cfirst |
跳转到第一项 |
:clast |
跳转到最后一项 |
:cc N |
跳转到第N项 |
:copen |
打开quickfix窗口 |
:cclose |
关闭quickfix窗口 |
:cnfile |
下一个文件的第一项 |
:cpfile |
上一个文件的最后一项 |
ctrl+i:进入定义或声明之处
ctrl+o:跳出定义或声明之处
YCM中采用vim的jumplist
单词,字符串之间跳跃
b:反向跳跃到单词首字符
B:反向跳跃到字符串首字符
w:正向跳跃到单词首字符
W:正向跳跃到字符串首字符
e:正向跳跃到字符末尾字符
E:正向跳跃到字符串末尾字符
ge:跳跃到上一个字符末尾
gE:跳跃到上一个字符串末尾
显示
zt:当前行显示到顶部
zz:当前行显示到屏幕中间
3H:跳到顶部第三行
5L:调到底部第五行
面向字符,行,列操做
- v:面向字符,配合b,w,e,ge能够快速选择而且匹配
- caw,yaw,daw:面向单词级别的处理
- V:面向行处理,Vr|,将一行所有转换成|
- ctrl+v:面向列处理,c-v3j,连续选择下面三列同位置,包含最初一行
- shift+i 在所选高亮区域前插入,shift+a 在所选高亮区域后觉得插入
- gv:重复选择上次的高亮区域
- gU{motion},motion好比:it,V等,大写所选内容,gUgU大写所在行
- gu{motion},motion好比:it,V等,小写所选内容,gugu小写所在行
- i:当前光标前插入,I行首插入
- a:当前光标后插入,A行末插入
- o:切换高亮选区的活动端
vim比较文件方法
-
- vimdiff FILE_LEFT FILE_RIGHT
- vim -d FILE_LEFT FILE_RIGHT
-
- vim FILE_LEFT
- :vertical diffsplit FILE_RIGHT
-
- [c
- ]c
- :set noscrollbind
- :diffupdate 更新以后,须要手动同步
-
- :diffthis
-
- 合并文档:
- dp 将差别点的当前文档内容应用到另外一文档(diff put)
- do 将差别点的另外一文档的内容拷贝到当前文档(diff get)
- 上下文的展开和查看
- 比较和合并文件的时候常常须要结合上下文来肯定最终要采起的操做。Vimdiff 缺省是会把不一样之处上下各 6 行的文本都显示出来以供参考。其余的相同的文本行被自动折叠。若是但愿修改缺省的上下文行数为3行,能够这样设置:
- :set diffopt=context:3
- 能够用简单的折叠命令来临时展开被折叠的相同的文本行:
- zo (folding open, z这个字母看上去比较像折叠的纸)
- 而后能够用下列命令来从新折叠:
- zc (folding close)
-
常见须要掌握的vim操做
- 不按Esc而是按[或者c,速度快不少
- 学会几个定位键的区别:0, $, {, }, g, G, w, e, b…
- o, O分别是当前位置下面/上面插入一个新行并进入插入状态
- Shift+V选定几行,而后用 一块儿移动
- Ctrl+V选定行首或行尾的字符,而后用shift+i作插入,或者shift+x作删除
- 学会用y,d 和p, P作粘贴剪切
- 学会用^W的窗口操做。打开文件用sp或者vs
- 学会记录宏的命令。用q加任意键开始录制,再按q保存。而后可用@加这个任意键回放,在@前加数字可定义回放次数。
- "."重复上一个命令,“u"取消上一个命令,”^r"反取消
- ^n, ^p用buf里的关键词补全。
- 学会搜索替换":%s/要搜的东西/要换成的东西/g"
- 任什么时候候移到一个单词上按#的话能够高亮这个文档里全部同样的单词
- 用“/”作搜索, 按n或N 上一个/下一个
- ":!命令 &“可直接运行这个命令,用”:!命令 %&"若是你想让这个命令对当前所编辑文件作操做。
- 任什么时候候可用":cd %:p:h"来切换目录到当前编辑文件所在目录。
vimscript中不错的语句小结
-
- autocmd BufRead,BufNewFile *.py let python_highlight_all = 1
-
- au FileType python setlocal formatprg=autopep8\ -
- autocmd FileType c,cpp,java,go,php,javascript,puppet,python,rust,twig,xml,yml,perl autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()
- autocmd ! 清除vimcrc组所有的自动命令
-
- #快捷键函数映射
- map <F3> :call FormatSrc()<CR><CR>
- func FormatSrc()
- exec "w"
- if &filetype == 'py' || &filetype == 'python'
- exec "r !autopep8 -i --aggressive --aggressive %" ”读取该命令执行后的结果
- endif
- exec "e! %" “编辑当前文件:不管缓存区里是否已经更改,考虑多人编辑文档的状况
- endfunc
-
- noremap <F3> :Autoformat<CR>
- au BufWrite * :Autoformat
-
-
- au FileType python let &l:formatprg='autopep8 -a -a -'
-