加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

LINUX教学:Vim配置详解

发布时间:2020-12-13 17:52:11 所属栏目:Linux 来源:网络整理
导读:《LINUX教学:Vim配置详解》要点: 本文介绍了LINUX教学:Vim配置详解,希望对您有用。如果有疑问,可以联系我们。 Linux下的编辑器以vim和emacs为主流,一个编辑器之神,一个是神的编辑器. 本文以主要介绍如安在linux下以vim为基础搭建一个比较顺手的代码编辑器

《LINUX教学:Vim配置详解》要点:
本文介绍了LINUX教学:Vim配置详解,希望对您有用。如果有疑问,可以联系我们。

Linux下的编辑器以vim和emacs为主流,一个编辑器之神,一个是神的编辑器.本文以主要介绍如安在linux下以vim为基础搭建一个比较顺手的代码编辑器.

  • 有两种比拟流行的方式:

自动安装
手动安装

  • 自动安装

  这种是办法是比较省事的办法,只要一个.vimrc配置文件就可以搞定所有的事情,一次配好即可.以后只要有这个配置文件,就可以走遍天下.
这种方式需要使用一个VIM插件管理工具来自动管理VIM插件的安装与卸载,笔者使用的Vundle来管理VIM插件,Vundle的全称是Vim Bundle,它是一款Vim插件管理工具.Vundle让你可以非常轻松地安装、更新、搜索和清理Vim插件.它还能管理你的运行时环境,并帮助标记.

    • 可以在Github上下载Vundle: https://github.com/VundleVim/Vundle.vim

下载完成后,解压到用户根目次的.vim目次下即可

    • 在终端(命令行)中使用git clone获取: git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

clone完成后,会在用户根目录下多出来一个bundle目录,此时Vundle已经安装完成.安装好Vundle以后,就可以根据本身的需要安装插件了.Vundle提供了几种不同的插件安装方式,一般我们用到的插件在github都可以找到,因此最常用的一般就是直接找github上插件对应的仓名,添加到.vimrc中即可.然后打开vim,执行:PluginInstall命令,即可自动安装,等待Vundle执行完下载安装操作后,就可以开始享受VIM了.

笔者的.vimrc文件配置如下:

"===============================================================================================
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'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'

" plugin from http://vim-scripts.org/vim/scripts.html
Plugin 'L9'

" Git plugin not hosted on GitHub
"Plugin 'git://git.wincent.com/command-t.git'

" git repos on your local machine (i.e. when working on your own plugin)
"Plugin 'file:///home/gmarik/path/to/plugin'

" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
"Plugin 'rstacruz/sparkup',{'rtp': 'vim/'}

" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
"Plugin 'ascenator/L9',{'name': 'newL9'}

" All of your Plugins must be added before the following line

"============================ my plugins start =============================
Plugin 'scrooloose/nerdtree'
Plugin 'kien/ctrlp.vim'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'majutsushi/tagbar'
Plugin 'tacahiroy/ctrlp-funky'
Plugin 'jlanzarotta/bufexplorer'
Plugin 'easymotion/vim-easymotion'
Plugin 'haya14busa/incsearch.vim'
Plugin 'dkprice/vim-easygrep'
Plugin 'dyng/ctrlsf.vim'
Plugin 'Xuyuanp/nerdtree-git-plugin'
Plugin 'hfts/Porsche'
Plugin 'vim-scripts/OmniCppComplete'
Plugin 'vim-scripts/AutoComplPop'
Plugin 'scrooloose/nerdcommenter'

"============================ my plugins end ===============================

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
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line

"========== for vim ==============
syntax enable " 开启语法高亮
set t_Co=256 " 开启256色显示
set scrolloff=3 " 滚动时坚持边距5行
set number " 开启行号显示
set mouse=a " 开启鼠标
set cmdheight=1
set nocompatible
set confirm " 在处理未保存或只读文件的时候,弹出确认
set autoindent? ? " 自动缩进
set tabstop=4? ? " Tab键的宽度
set expandtab " 展开tab为空格
set softtabstop=4? ? " 统一缩进为4
set shiftwidth=4
filetype plugin indent on "打开文件类型检测,加了这句才可以用智能补全
set completeopt=longest,menu
set hlsearch " 高亮搜索
set laststatus=1 " 始终显示状态栏
set encoding=utf-8 "
set ignorecase " 搜索忽略大小写
set nopaste " 切换到正常模式
set list lcs=tab:| " 显示对齐线 | | ┆ │

colorscheme Porsche

set cursorline
"hi cursorline cterm=none term=none
"autocmd WinEnter * setlocal cursorline
"autocmd WinLeave * setlocal nocursorline
"highlight CursorLine guibg=#30F010 ctermbg=189

"自动补全
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "&;Right>"
else
return a:char
endif
endfunction"

"========== for quick key =======
" F11默认时全屏
nmap <F2> :NERDTreeToggle<cr>
nmap <F3> :TagbarToggle<CR>
nmap <F4> :ToggleBufExplorer<cr>
nmap <F5> :CtrlPFunky<cr>
nmap <F10> :set paste<cr> " 切换到粘贴模式
nmap <F12> :source ~/.vimrc<cr>
nmap <silent> <leader>ll :colorscheme Porsche<cr>
nmap <silent> <leader>jj :colorscheme space-vim-dark<cr>
nmap <silent> <leader>nm :set nonumber<cr>
nmap <silent> <leader>mn :set number<cr>
nmap <silent> <leader>ag :Ag<cr>
nmap <silent> <leader>ff ::shell<cr>

"========== for NERDTree ==============
"let g:NERDTree_title='NERD Tree'
"let g:winManagerWindowLayout='NERDTree|TagList,Tarbar'
autocmd vimenter * NERDTree
nmap wm :NERDTreeToggle<cr>
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") ) | q | endif
function! NERDTree_Start()
exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
return 1
endfunction
nmap <silent> mt :if IsWinManagerVisible() <BAR> WMToggle<CR> <BAR> else <BAR> WMToggle<CR>:q<CR> endif "<CR>

"========== for CtrlP ===================
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlP'
let g:ctrlp_working_path_mode = 'r'
let g:ctrlp_match_window = 'bottom,order:ttb,min:1,max:15,results:100'
let g:ctrlp_tabpage_position = 'al'
let g:ctrlp_working_path_mode = 'r'
let g:ctrlp_reuse_window = 'netrw|help|quickfix'
let g:ctrlp_open_new_file = 't'
let g:ctrlp_open_multiple_files = 'tjr'
let g:ctrlp_arg_map = 1
let g:ctrlp_extensions = ['tag','buffertag','quickfix','dir','rtscript',
'undo','line','changes','mixed','bookmarkdir']
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.png,*.jpg,*.jpeg,*.gif " MacOSX/Linux
let g:ctrlp_custom_ignore = 'v[/].(git|hg|svn)$'

if executable('ag')
" Use Ag over Grep
set grepprg=ag --nogroup --nocolor
" Use ag in CtrlP for listing files.
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
" Ag is fast enough that CtrlP doesn't need to cache
let g:ctrlp_use_caching = 0
endif

"========== for CtrlPFunky ==============
nnoremap <Leader>u :execute 'CtrlPFunky ' . expand('<cword>')<Cr>
let g:ctrlp_extensions = ['funky']
let g:ctrlp_funky_syntax_highlight = 1
let g:ctrlp_funky_matchtype = 'path'
let g:ctrlp_funky_nerdtree_include_files = 1

"========== for vim-airline ==============
let g:airline_theme="light" "light
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'

"========== for EasyMotion ==============
" <Leader>f{char} to move to {char}
map <Leader>f <Plug>(easymotion-bd-f)
nmap <Leader>f <Plug>(easymotion-overwin-f)
" s{char}{char} to move to {char}{char}
nmap s <Plug>(easymotion-overwin-f2)
" Move to line
map <Leader>L <Plug>(easymotion-bd-jk)
nmap <Leader>L <Plug>(easymotion-overwin-line)
" Move to word
map <Leader>w <Plug>(easymotion-bd-w)
nmap <Leader>w <Plug>(easymotion-overwin-w)

"========== for insearch ==============
map / <Plug>(incsearch-forward)
map ? <Plug>(incsearch-backward)
map g/ <Plug>(incsearch-stay)
nnoremap <Esc><Esc> :<C-u>nohlsearch<CR>
"set incsearch
set hlsearch
let g:incsearch#auto_nohlsearch = 0
map n <Plug>(incsearch-nohl-n)
map N <Plug>(incsearch-nohl-N)
map * <Plug>(incsearch-nohl-*)
map # <Plug>(incsearch-nohl-#)
map g* <Plug>(incsearch-nohl-g*)
map g# <Plug>(incsearch-nohl-g#)

"=========== for NERDTREE-GIT-PLUGIN =====
let g:NERDTreeIndicatorMapCustom = {
"Modified" : "?",
"Staged" : "?",
"Untracked" : "?",
"Renamed" : "?",
"Unmerged" : "═",
"Deleted" : "?",
"Dirty" : "?",
"Clean" : "??",
"Unknown" : "?"
}

"=========== cscope ===============
if has("cscope")
set csprg=/usr/local/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
endif
nmap <C-&;s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-&;g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-&;c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-&;t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-&;e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-&;f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-&;i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-&;d :cs find d <C-R>=expand("<cword>")<CR><CR>

"=========== omnicppcomplete ===============
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_NamespaceSearch = 2
let OmniCpp_DisplayMode = 1
let OmniCpp_ShowScopeInAbbr = 1
let OmniCpp_ShowPrototypeInAbbr = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_MayCompleteDot = 1
let OmniCpp_MayCompleteArrow = 1
let OmniCpp_MayCompleteScope = 1
let OmniCpp_MayCompleteScope = 1
let OmniCpp_SelectFirstItem = 1
let OmniCpp_DefaultNamespace=["std"]
let OmniCpp_SelectFirstItem = 2

"===============NERD Commenter=========================
let g:NERDSpaceDelims = 1 " Add spaces after comment delimiters by default
let g:NERDCompactSexyComs = 1 " Use compact syntax for prettified multi-line comments
let g:NERDDefaultAlign = 'left' " Align line-wise comment delimiters flush left instead of following code indentation
let g:NERDAltDelims_java = 1 " Set a language to use its alternate delimiters by default
let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } } " Add your own custom formats or override the defaults
let g:NERDCommentEmptyLines = 1 " Allow commenting and inverting empty lines (useful when commenting a region)
let g:NERDTrimTrailingWhitespace = 1 " Enable trimming of trailing whitespace when uncommenting
"===============================================================================================

  • 手动安装

手动安装,当然是要自己一个一个地安装插件了.这种方式的特点是需要自己一个一下下载vim插件,然后手动进行安装.虽然比较费事,但如果之前有vim插件安装包的备份文件,那就可以不依赖于网络.所以还是保举在自己的本地留一份常用插件的安装包备份.手动安装的过程比较简单,基本上就是“下载-解压”,先从网卡下载好插件的压缩包,一般来说直接解压到.vim目录中即可.

笔者常用的几个插件如下,一般都可以在github上找到,其实从上面的配置文件中就可以找到笔者使用了哪些vim插件.
Plugin 'scrooloose/nerdtree'
Plugin 'kien/ctrlp.vim'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'majutsushi/tagbar'
Plugin 'tacahiroy/ctrlp-funky'
Plugin 'jlanzarotta/bufexplorer'
Plugin 'easymotion/vim-easymotion'
Plugin 'haya14busa/incsearch.vim'
Plugin 'dkprice/vim-easygrep'
Plugin 'dyng/ctrlsf.vim'
Plugin 'Xuyuanp/nerdtree-git-plugin'
Plugin 'hfts/Porsche'
Plugin 'vim-scripts/OmniCppComplete'
Plugin 'vim-scripts/AutoComplPop'
Plugin 'scrooloose/nerdcommenter'

末了,附上笔者vim的两张截图:

Vim入门根基知识集锦?

Vim入门根基教程

把Vim打造成优秀的C++ IDE?

Ubuntu 14.04进级Vim7.4到8.0?

Vim安装youcompleteme自动补全插件?

Linux Vim编纂器使用简单讲解?

Vim文本编纂器?

Vim安装与设置装备摆设进阶版

Vim编纂器使用教程?

Ubuntu 16.04 Vim YouCompleteMe自动补全的安装设置装备摆设与使用?

Linux文本编纂器Vim基础教程?

本文永远更新链接地址:?

学习更多LINUX教程,请查看站内专栏,如果有LINUX疑问,可以加QQ交流咨询。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读