vim使用记录 #vim配置 vim大杀器开始玩啦。 ##安装vim最新版 ``` # sudo apt-get install software-properties-common sudo add-apt-repository ppa:jonathonf/vim sudo apt-get update && sudo apt-get install vim #在mac 中 brew install vim #修改配置文件 alias vim='/usr/local/bin/vim' alias vi='/usr/local/bin/vim' # 检查是否有clipboard的支持 vim --version | grep clipboard # 如果显示 +clipboard则有,否则无 # 安装vim-gui-common,如果没有+clipboard支持的话 apt install vim-gui-common # 在windows安装 xming xserver并在xshell配置隧道 ``` ## 简单的无插件配置 ``` " 剪贴板设为系统 "set clipboard=unnamedplus " 打开鼠标控制 "set mouse=a set backspace=2 set ignorecase filetype off " required" runtime! debian.vim if has("syntax") syntax on endif " 自动删除多余空格 " From: Vigil " function RemoveTrailingWhitespace() if &ft != "diff" let b:curcol = col(".") let b:curline = line(".") silent! %s/\s\+$// silent! %s/\(\s*\n\)\+\%$// call cursor(b:curline, b:curcol) endif endfunction autocmd BufWritePre * call RemoveTrailingWhitespace() highlight ExtraWhitespace ctermbg=red guibg=red autocmd BufWinEnter * match ExtraWhitespace /\s\+$\| \+\ze\t\+\|\t\+\zs \+/ set ts=4 set sw=4 set nu set autoindent let mapleader="\\" inoremap jj noremap cp yapp noremap gt noremap gT nnoremap s :w inoremap s :w nnoremap c :q! inoremap c :q! xnoremap p pgvy ``` ##安装vendle插件 ``` git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim ``` ##编辑配置文件 ```bash " 剪贴板设为系统 set clipboard=unnamed " 打开鼠标控制 set mouse=a set backspace=2 filetype off " required" runtime! debian.vim " 开始插件配置啦 set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'VundleVim/Vundle.vim' Plugin 'ctrlpvim/ctrlp.vim' Plugin 'majutsushi/tagbar' Plugin 'scrooloose/nerdtree' Plugin 'jiangmiao/auto-pairs' Plugin 'fatih/vim-go' Plugin 'scrooloose/syntastic' Plugin 'mileszs/ack.vim' call vundle#end() " required " filetype plugin indent on " required " if has("syntax") syntax on endif " 自动删除多余空格 " From: Vigil " function RemoveTrailingWhitespace() if &ft != "diff" let b:curcol = col(".") let b:curline = line(".") silent! %s/\s\+$// silent! %s/\(\s*\n\)\+\%$// call cursor(b:curline, b:curcol) endif endfunction autocmd BufWritePre * call RemoveTrailingWhitespace() set ts=4 set sw=4 set nu set autoindent let mapleader=";" highlight ExtraWhitespace ctermbg=red guibg=red autocmd BufWinEnter * match ExtraWhitespace /\s\+$\| \+\ze\t\+\|\t\+\zs \+/ let g:ctrlp_map = '' let g:ctrlp_cmd = 'CtrlP' let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn|pyc)$' nmap :TagbarToggle map :NERDTreeToggle let g:NERDTreeWinSize = 20 let NERDTreeIgnore = ['.*\.o$','.*\.ko$','.*\.gz$','.*\.pyc$'] " 设置vim-go跳转定义,;gd nnoremap gd :GoDef " . 后面自动弹出代码提示 au filetype go inoremap . . " ctrl-z 自动弹出代码提示 imap " 只弹出代码提示,不补全 set completeopt=longest,menuone " 语法检查插件的配置 let g:syntastic_error_symbol='>>' let g:syntastic_warning_symbol='>' let g:syntastic_check_on_open=1 let g:syntastic_check_on_wq=0 let g:syntastic_enable_highlighting=1 let g:syntastic_python_checkers=['pyflakes'] " 使用pyflakes,速度比pylint快 let g:syntastic_javascript_checkers = ['jsl', 'jshint'] let g:syntastic_html_checkers=['tidy', 'jshint'] " 修改高亮的背景色, 适应主题 highlight SyntasticErrorSign guifg=white guibg=black " to see error location list let g:syntastic_always_populate_loc_list = 0 let g:syntastic_auto_loc_list = 0 let g:syntastic_loc_list_height = 5 function! ToggleErrors() let old_last_winnr = winnr('$') lclose if old_last_winnr == winnr('$') " Nothing was closed, open syntastic error location panel Errors endif endfunction nnoremap s :call ToggleErrors() "默认打开NERDTree func StartNerdTree() if &filetype == 'py'||&filetype == 'python'||&filetype == 'go' NERDTree endif endfunc autocmd vimenter * call StartNerdTree() " vim tab,使用 ;1 ;2跳tab noremap 1 1gt noremap 2 2gt noremap 3 3gt noremap 4 4gt noremap 5 5gt noremap 6 6gt noremap 7 7gt noremap 8 8gt noremap 9 9gt inoremap jj noremap cp yapp noremap gt noremap gT noremap a =ip nnoremap s :w inoremap s :w nnoremap c :q! inoremap c :q! xnoremap p pgvy ``` ##安装YouCompleteMe ``` cd ~/.vim/bundle/YouCompleteMe/ python install.py # 如果报cmake # sudo apt-get install CMake # 如果报python找不到,安装 # sudo apt-get install vim-nox # vim python支持 # sudo apt-get install python-dev python3-dev # 如果报c++解释器不支持c++11。装个g++ # apt-get install g++ ``` 到YouCompleteMe下,新建 ``` cpp/ycm/.ycm_extra_conf.py ``` 内容 ``` https://github.com/Valloric/ycmd/blob/master/cpp/ycm/.ycm_extra_conf.py ``` 默认检查的是CPP,要检查C需要修改一下。 python项目要加进Pythonpath,否则包可能找不到定义: ``` export PYTHONPATH=$PYTHONPATH:/home/yzh/yinzihao/workspace/qb_games/ ``` ## 导航 `gd` (go def) 跳转到定义 `ctrl + i` 前进 `ctrl + o` 后退 `:e filepath` 打开文件 `sp` 横向分屏 `vsp` 纵向分屏 `Ctrl + w + w` 切换(分屏)栏 `( `移动到当前句子开头 `) `移动到下一句子开头 `{` 移动到当前段落开头 `}` 移动到下一段落开头 `+` 移动到下一行开头 `-` 移动到上一行开头 `gg` 到文档第一行 `G` 到文档最后一行 `0` 到行首(第 1 列) `^` 到第一个非空白字符 `$` 到行尾 `%` 到配对的另一个标点 ## 搜索替换 ### 配置 `:set ic` 设置搜索时分大小写 `:set noic` 设置搜索时不分大小写 ### 全文 `%s/foo/bar/g` 全文替换 `%s/foo/bar/gi` 全文忽略大小写 `%s/foo/bar/gci` 全文忽略大小写,每次确认 ### 选定替换 1. 先`shift + v`进入行选模式 2. `shift + ;`进入替换模式,此时会进入提示状态`:'<,'>` 3. 补全命令为:`:'<,'>s/foo/bar/g`,则为选定内容中全文替换,其它规则与普通替换一致 ### 正则 假设有文档如下: ``` The N key searches backward... ...the \v pattern switch (a.k.a. very magic search)... ``` 直接搜索`/a.k.a`,默认`.`代表正则中的任意字符。会匹配:b`ackwa`rd,与`a.k.a`。 此时需要使用转义`\`。搜索`/a\.k\.a`。 在vim中,有very magic模式。搜索时`/\Va.k.a`则会忽略正则。不会匹配到b`ackwa`rd。但vscode vim插件似乎不支持。 ## 删除 ### 删除单词/符号内 `di"` (delete inner ") 删除`"`之间的内容,同理`di(`则会删除`()`中的内容。同理`ci"`也可以。 `i`在普通模式下非常有用。比如yiw代表复制单词,ciw代表剪切单词,viw代表选定单词 `da"` (delete a ") 删除`"`之间的内容,包括`"` `diw` 删除光标处完整单词,同理`ciw`也可以。 ### 删除多行 复杂方法: `:5,9d`,删除5-9行 简单方法: 先`shift+v`进入行选模式,按`d`。 ## 选择 ### 选单词/符号内 `viw`,选定一个单词 `vi"`,选定`"`内的内容。同理`vi(`则会选定`()`内的内容。 ### 行选 `shift + v`进入行选模式 ### 纵选 visual block `ctrl + v`进入纵选模式 纵选非常有用,可以批量在多行内插入相同的字符。例如行注释: 1. `ctrl + v`进入visual block模式 2. 按`j`或者`下箭头`,选定需要的行 3. `shift + i`,进入插入模式 4. 输入`#`,在当前所有行的这个位置插入`#`字符 ## mark 书签 `m + a-z任意寄存器` 保存当前行为书签 `' + 之前选定的寄存器` 跳转到书签行 ## 宏 `q + a-z` 进入录制 进入操作 再按`q` 退出录制 `@+之前选定的寄存器` 重播 ## tab 1. 创建新tab `tabnew` 2. 把当前tab移动到最后 `tabm` 最前 `tabr` 3. 关闭其它 `tabo` 4. 切换后一个tab`gt`,前一个`gT` ## 黑科技(没啥用的科技) ### 顺序替换递增 ``` # 将数组中括号的[X]替换为顺序递增数字 let n=0|g/\[\zs\d\+/s//\=n/|let n=n+1 ``` ##NERDTreeToggle用法 ``` ctrl + w + w 光标自动在左右侧窗口切换 ctrl + w + r 移动当前窗口的布局位置 o 在已有窗口中打开文件、目录或书签,并跳到该窗口 t 在新 Tab 中打开选中文件/书签,并跳到新 Tab O 递归打开选中 结点下的所有目录 x 合拢选中结点的父目录 X 递归 合拢选中结点下的所有目录 e Edit the current dif D 删除当前书签 p 跳到父结点 C 将选中目录或选中文件的父目录设为根结点 u 将当前根结点的父目录设为根目录,并变成合拢原根结点 U 将当前根结点的父目录设为根目录,但保持展开原根结点 r 递归刷新选中目录 R 递归刷新根结点 m 显示文件系统菜单 cd 将 CWD 设为选中目录 I 切换是否显示隐藏文件 f 切换是否使用文件过滤器 F 切换是否显示文件 B 切换是否显示书签 q 关闭 NerdTree 窗口 ? 切换是否显示 Quick Help ``` 来自 大脸猪 写于 2017-02-08 11:04 -- 更新于2022-07-30 22:07 -- 2 条评论