vim 使用指南
vim使用指南、相关配置以及插件管理vim-plug、Vundle、NERDTree、NERD Commenter、YouCompleteMe以及配色方案solarized和molokai等
vim使用说明
快捷键
- 跳转
- 跳转到行首–
Home
- 跳转到行尾–
A
- 跳转到文件头–
gg
- 跳转到文件尾–
G
- 跳转到指定行–
xxgg
,23gg等 - 粘贴复制
- 从文件内容复制到:命令行:
v
进入到Visual模式,选中字符串y
复制字符串,:
或"/“进入到命令行模式,Ctrl+r"
快捷键将复制的内容粘贴到命令行 - 撤销和反撤销
- 命令模式下
u
表示撤销 - 命令模式下
Ctrl+r
表示反撤销 - 搜索和查找
:vimgrep /{pattern}/[g][j] {file}...
:copen
打开查找结果:cclose
关闭查找结果:cc
转到当前查找位置:cn
转到下一个位置:cp
转到前一个位置
配置文档
Linux下vim的配置在用户目录下,配置文档为
.vimrc
。"行号 set number "设置编码 set encoding=utf-8 "设置终端编码 set termencoding=utf-8 "设置文件编码 set fileencoding=utf-8 "显示输入的命令 set showcmd "设置颜色级别 set t_Co=256 "文件自动更新载入 set autoread "显示匹配的括号 set showmatch "tab键用空格表示 set expandtab "设置tab所占字符的大小 set tabstop=4 "设置tab键按下之后的行为,插入的是空格和tab制表符的混合。 "如果tabstop==softtabstop,则插入一个tab制表符; "如果tabstop>softtabstop,则插入整数个tab制表符和余数个空格。 "如果设置了expandtab,则全部插入空格。 set softtabstop=4 "缩进 "启动自动缩进 set autoindent "设置缩进宽度 set shiftwidth=4 "折叠 set foldmethod=indent "总是显示标签栏 set showtabline=2 "缓冲区更新事件 set updatetime=100 "状态栏 "set laststatus=2 "t:文件名;y:文件内容类型;\&ff:文件类型unix/mac/dos;l:行号;c:列号 "set statusline=%t\ %y\ format:\ %{&ff};\ [%l,%c] "set statusline=%F%m%r%h%w%=\ [ft=%Y]\ %{\"[fenc=\".(&fenc==\"\"?&enc:&fenc).((exists(\"+bomb\")\ &&\ &bomb)?\"+\":\"\").\"]\"}\ [ff=%{&ff}]\ [asc=%03.3b]\ [hex=%02.2B]\ [pos=%04l,%04v][%p%%]\ [len=%L] "查找结果高亮 set hlsearch "增量查找 set incsearch "大小写敏感 set noignorecase "设置不兼容vi set nocompatible "返回上次编辑位置 autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif "代码 "语法高亮 syntax enable "允许用指定语法高亮配色方案替换默认方案 syntax on "高亮当前行 set cursorline "快捷键 nnoremap <Leader>q :q!<CR> nnoremap <Leader>w :w<CR> ""插件安装配置 filetype off set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'VundleVim/Vundle.vim' Plugin 'preservim/nerdtree' Plugin 'Xuyuanp/nerdtree-git-plugin' Plugin 'rhysd/vim-clang-format' Plugin 'ycm-core/YouCompleteMe' Plugin 'vim-airline/vim-airline' Plugin 'vim-airline/vim-airline-themes' Plugin 'tpope/vim-fugitive' Plugin 'airblade/vim-gitgutter' Plugin 'octol/vim-cpp-enhanced-highlight' Plugin 'preservim/nerdcommenter' Plugin 'dense-analysis/ale' call vundle#end() filetype plugin indent on "NERDTree配置 "设置快捷键 nnoremap <leader>n :NERDTreeFocus<CR> nnoremap <C-t> :NERDTreeToggle<CR> nnoremap <C-f> :NERDTreeFind<CR> "打开vim时打开NERDTree autocmd VimEnter * NERDTree | wincmd p "退出最后一个tab时同时退出NERDTree. autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif "设置显示方式 let g:NERDTreeDirArrowExpandable = '▸' let g:NERDTreeDirArrowCollapsible = '▾' "显示行号 let g:NERDTreeShowLineNumbers=1 "窗口大小 let g:NERDTreeWinSize=40 "窗口位置 let g:NERDTreeWinPos = 'left' "高亮当前行 let g:NERDTreeHighlightCursorline = 1 "色彩显示 let g:NERDChristmasTree = 1 "显示隐藏文件 let g:NERDTreeShowHidden=1 "在tab中打开文件 let g:NERDTreeCustomOpenArgs={'file':{'where': 't'}} "配置NERDTree结束 "配置nerdtree-git-plugin let g:NERDTreeGitStatusIndicatorMapCustom = { \ 'Modified' :'✹', \ 'Staged' :'✚', \ 'Untracked' :'✭', \ 'Renamed' :'➜', \ 'Unmerged' :'═', \ 'Deleted' :'✖', \ 'Dirty' :'✗', \ 'Ignored' :'☒', \ 'Clean' :'✔︎', \ 'Unknown' :'?', \ } "配置nerdtree-git-plugin "配置vim-clang-format "格式化快捷键 "normal模式 autocmd FileType c,cpp,objc nnoremap <buffer><Leader>cf :<C-u>ClangFormat<CR> "view模式 autocmd FileType c,cpp,objc vnoremap <buffer><Leader>cf :ClangFormat<CR> "启动自动格式化,启动之后在保存文件时会自动格式化 nnoremap <leader>C :ClangFormatAutoToggle<CR> "插入的行在离开插入模式时格式化 let g:clang_format#auto_formatexpr=1 "自动检测.clang-format文件 let g:clang_format#detect_style_file=1 "配置vim-clang-format "配置tab快捷键 nnoremap <S-Right> :tabn<CR> nnoremap <S-Left> :tabp<CR> nnoremap <C-c-o> :copen<CR> nnoremap <C-c-c> :cclose<CR> "配置tab快捷键 "配置快捷键拷贝系统粘贴版 vnoremap <Leader>y "+y "配置vim airline let g:airline#extensions#tabline#enabled=1 let g:airline#extensions#tabline#left_sep = '' let g:airline#extensions#tabline#left_alt_sep = '|' let g:airline#extensions#tabline#formatter = 'unique_tail_improved' let g:airline#extensions#ale#enabled = 1 "配置vim airline "配置vim- nerdcommenter注释插件 "Create default mappings let g:NERDCreateDefaultMappings = 1 "Add spaces after comment delimiters by default let g:NERDSpaceDelims = 1 "Use compact syntax for prettified multi-line comments let g:NERDCompactSexyComs = 1 "Align line-wise comment delimiters flush left instead of following code indentation let g:NERDDefaultAlign = 'left' "Set a language to use its alternate delimiters by default let g:NERDAltDelims_java = 1 "Add your own custom formats or override the defaults let g:NERDCustomDelimiters = { 'c': { 'left': '//','right': '' } } "Allow commenting and inverting empty lines (useful when commenting a region) let g:NERDCommentEmptyLines = 1 "Enable trimming of trailing whitespace when uncommenting let g:NERDTrimTrailingWhitespace = 1 "Enable NERDCommenterToggle to check all selected lines is commented or not let g:NERDToggleCheckAllLines = 1 "配置vim- nerdcommenter注释插件 "YouCompleteMe "启用加载.ycm_extra_conf.py提示 let g:ycm_confirm_extra_conf=1 "在注释输入中也能补全 let g:ycm_complete_in_comments = 1 "在字符串输入中也能补全 let g:ycm_complete_in_strings = 1 "开启 YCM 基于标签引擎 let g:ycm_collect_identifiers_from_tags_files=1 "注释和字符串中的文字也会被收入补全 let g:ycm_collect_identifiers_from_comments_and_strings = 1 let g:ycm_seed_identifiers_with_syntax=1 "语言关键字补全, 不过python关键字都很短,所以,需要的自己打开 let g:ycm_collect_identifiers_from_tags_files = 1 " 从第2个键入字符就开始罗列匹配项 let g:ycm_min_num_of_chars_for_completion=2 "配置文件 let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py' "YouCompleteMe "配置ale "标志列始终打开 let g:ale_sign_column_always = 1 "自定义图标 let g:ale_sign_error = '✗' let g:ale_sign_warning = '⚡' "显示Linter名称,出错或警告等相关信息 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' "<Leader>s触发/关闭语法检查 nmap <Leader>s :ALEToggle<CR> "<Leader>d查看错误或警告的详细信息 nmap <Leader>d :ALEDetail<CR> "普通模式下,sp前往上一个错误或警告,sn前往下一个错误或警告 nmap sp <Plug>(ale_previous_wrap) nmap sn <Plug>(ale_next_wrap) "使用clang对c和c++进行语法检查,对python使用pylint进行语法检查 let g:ale_linters = { \ 'c++': ['gcc'], \ 'c': ['gcc'], \ 'python': ['pylint'], \}
vim命令
自定义命令-添加文件头说明
"新建文件插入文件头注释
autocmd BufNewFile *.cpp,*.hpp,*.[ch] exec ":call AddHeadCommentC()"
func AddHeadCommentC()
call setline(1, "/*************************************************************************")
call append(line("."), " > File Name: ".expand("%"))
call append(line(".")+1, " > Author: blduan")
call append(line(".")+2, " > Mail: 1578770584@qq.com")
call append(line(".")+3, " > Created Time: ".strftime("%c"))
call append(line(".")+4, " ************************************************************************/")
call append(line(".")+5, "")
"新建文件后,自动定位到文件末尾
autocmd BufNewFile * normal G
endfunc
autocmd BufNewFile *.sh exec ":call AddHeadCommentSH()"
func AddHeadCommentSH()
call setline(1, "##########################################################################")
call append(line("."), "# File Name: ".expand("%"))
call append(line(".")+1, "# Author: blduan")
call append(line(".")+2, "# Mail: 1578770584@qq.com")
call append(line(".")+3, "# Created Time: ".strftime("%c"))
call append(line(".")+4, "##########################################################################")
call append(line(".")+5, "#!/bin/bash")
"新建文件后,自动定位到文件末尾
autocmd BufNewFile * normal G
endfunc
重新打开文件–跳转到上次位置
" Return to last edit position when opening files (You want this!)
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
常用插件
插件管理器Vundle
Vundle是一个Vim插件管理器。支持Install、Update、Search以及Clean插件。
安装方式:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
插件配置如下:
set nocompatible " be iMproved, required filetype off " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " alternatively, pass a path where Vundle should install plugins "call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required Plugin 'VundleVim/Vundle.vim' call vundle#end() " required filetype plugin indent on " required " To ignore plugin indent changes, instead use: "filetype plugin on " " Brief help " :PluginList - lists configured plugins " :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate " :PluginSearch foo - searches for foo; append `!` to refresh local cache " :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal "
插件管理器vim-plug
vim-plug是一个开源、极简、易用、并行安装或更新插件的插件管理器
安装方式
自动安装:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
手动安装:下载plug.vim并放置在
/home/[用户]/.vim/autoupload/
目录中。插件安装
在
.vimrc
配置文件中添加下面几行:call plug#begin('~/.vim/plugged') // 中间是要安装的插件 call plug#end()
重新打开vim,执行命令
:PlugInstall
,会自动安装上面列出的所有插件。插件卸载
在
.vimrc
配置文件中删除或注释待卸载插件的配置项,重新打开vim,然后执行命令:PlugClean
,会自动卸载相关插件。插件更新
打开vim然后执行
:PlugUpdate
Hooks
有些插件在安装或更新之后需要执行一些动作,此时需要用
do
选项描述要执行的任务。function! BuildYCM(info) " info is a dictionary with 3 fields " - name: name of the plugin " - status: 'installed', 'updated', or 'unchanged' " - force: set on PlugInstall! or PlugUpdate! if a:info.status == 'installed' || a:info.force !./install.py endif endfunction Plug 'ycm-core/YouCompleteMe', { 'do': function('BuildYCM') }
文件系统浏览器NERDTree
NERDTree是vim的文件浏览器,使用该插件可以浏览复杂的文件结构,以及快速的打开文件。
安装方式
call plug#begin() Plug 'preservim/nerdtree' call plug#end()
重启vim,执行命令
:PlugInstall
相关配置
快捷键映射:
nnoremap <F2> :NERDTree<CR>
—打开或关闭NERDTree当NERDTree是最后一个窗口时自动关闭vim
" Exit Vim if NERDTree is the only window remaining in the only tab. autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
NERDTree的一些全局属性配置:
" 目录扩展符号 let g:NERDTreeDirArrowExpandable = '▸' let g:NERDTreeDirArrowCollapsible = '▾' " 显示隐藏文件 let g:NERDTreeShowHidden = 1 " NERDTree目录窗口 let g:NERDTreeWinSize = 40 " 窗口位置 let g:NERDTreeWinPos = 'left' " 高亮当前行 let g:NERDTreeHighlightCursorline = 0 " 色彩显示 let g:NERDChristmasTree = 1
配色方案
常用的两种主题:
solarized
和molokai
。安装方式
solarized
主题的使用有个前提条件就是gnome terminal的配色方案也要使用solarized
,如果gnome terminal使用solarized
配色方案,那么vim的solarized
配色即开箱即用,不用再额外安装。molokai
配色安装,首先下载molokai
,其次将colors文件夹下的molokai.vim
复制到/home/[用户]/.vim/colors/
中(没有该目录则创建)。在
.vimrc
中增加配置如下:syntax enable syntax on set background = dark colorscheme molokai
自动补全插件YouCompleteMe
YouCompleteMe是vim的自动提示补全插件,支持C、C++、Python、Java、JavaScript等语言。
安装方式 针对C语言
call vundle#begin() Plugin 'ycm-core/YouCompleteMe' call vundle#end()
执行
:PluginInstall
预安装:
apt install build-essential cmake vim-nox python3-dev
编译执行:
cd ~/.vim/bundle/YouCompleteMe && python3 install.py --clangd-completer
代码高亮插件vim-cpp-enhanced-highlight
配置方式
Plugin 'octol/vim-cpp-enhanced-highlight'
代码注释插件NERD Commenter
安装方式
call vundle#begin() Plugin 'preservim/nerdcommenter' call vundle#end()
重新打开vim,执行
:PluginInstall
相关配置
" Add spaces after comment delimiters by default let g:NERDSpaceDelims = 1
使用方式
大写V进入Visual模式,选择多行,在执行\cc即可注释多行。
\ca可以切换注释方式,是
//
或者/**/
- 原文作者:生如夏花
- 原文链接:https://blduan.top/post/%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91/vim/vim-guide/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。