Linux下的编辑器以vim和emacs为主流,一个编辑器之神,一个是神的编辑器。本文以主要介绍如何在linux下以vim为基础搭建一个比较顺手的代码编辑器。
自动安装
手动安装
这种是方法是比较省事的方法,只要一个.vimrc配置文件就可以搞定所有的事情,一次配好即可。以后只要有这个配置文件,就可以走遍天下。
这种方式需要使用一个VIM插件管理工具来自动管理VIM插件的安装与卸载,笔者使用的Vundle来管理VIM插件,Vundle的全称是Vim Bundle,它是一款Vim插件管理工具。Vundle让你可以非常轻松地安装、更新、搜索和清理Vim插件。它还能管理你的运行时环境,并帮助标记。
下载完成后,解压到用户根目录的.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 cmd 在处理未保存或只读文件的时候,弹出确认
set autoindent " 自动缩进
set tabstop=4 " Tab键的宽度
set expandtab " 展开tab为空格
set softtabstop=4 " 统一缩进为4
set shift打开文件类型检测, 加了这句才可以用智能补全
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 ( ()
:inoremap )
:inoremap { {
:inoremap }
:inoremap [ []
:inoremap ]
:inoremap " ""
:inoremap ' ''
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\
else
return a:char
endif
endfunction"
"========== for quick key =======
" F11默认时全屏
nmap
nmap
nmap
nmap
nmap
nmap
nmap
nmap
nmap
nmap
nmap
nmap
"========== for NERDTree ==============
"let g:NERDTree_title='NERD Tree'
"let g:winManagerWindowLayout='NERDTree|TagList,Tarbar'
autocmd vimenter * NERDTree
nmap wm :NERDTreeToggle
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") ) | q | endif
function! NERDTree_Start()
exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
return 1
endfunction
nmap
"========== for CtrlP ===================
let g:ctrlp_map = '
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
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 ==============
"
map
nmap
" s{char}{char} to move to {char}{char}
nmap s
" Move to line
map
nmap
" Move to word
map
nmap
"========== for insearch ==============
map /
map ?
map g/
nnoremap
"set incsearch
set hlsearch
let g:incsearch#auto_nohlsearch = 0
map n
map N
map *
map #
map g*
map 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
nmap
nmap
nmap
nmap
nmap
nmap
nmap
"=========== 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入门基础知识集锦 http://www.linuxidc.com/Linux/2017-02/140903.htm
Vim入门基础教程 http://www.linuxidc.com/Linux/2017-02/140279.htm
把Vim打造成优秀的C++ IDE http://www.linuxidc.com/Linux/2016-06/132262.htm
Ubuntu 14.04升级Vim7.4到8.0 http://www.linuxidc.com/Linux/2016-11/136816.htm
Vim安装youcompleteme自动补全插件 http://www.linuxidc.com/Linux/2016-11/137665.htm
Linux Vim编辑器使用简单讲解 http://www.linuxidc.com/Linux/2016-12/138930.htm
Vim文本编辑器 http://www.linuxidc.com/Linux/2017-03/142275.htm
Vim安装与配置进阶版 http://www.linuxidc.com/Linux/2017-03/141724.htm
Vim编辑器使用教程 http://www.linuxidc.com/Linux/2017-07/145885.htm
Ubuntu 16.04 Vim YouCompleteMe自动补全的安装配置与使用 http://www.linuxidc.com/Linux/2017-02/141088.htm
Linux文本编辑器Vim基础教程 http://www.linuxidc.com/Linux/2017-09/146930.htm
:http://www.linuxidc.com/Linux/2017-09/147109.htm