一、說說這個編輯器
不得不說,vim是一款出色的編輯器,體現在兩方面:一是輕量級跨平臺的,unix服務器也好,桌面版的linux發行版也好,還是macbook,都自帶vim,而且都能兼容(windows只能用gvim或者在linux模擬環境下運行vim);二是提供出色的相對靈活的編輯功能,包括自定義快捷鍵,定義宏,添加插件,視圖模式和編輯模式分離,可運行shell命令等等。
當前使用的版本爲7.4.1689,運行在ubuntu 16.04下。這是 vim官方網址,不記得以前的版本了,記得是從ubuntu8.04開始接觸的(不禁感慨,原來轉眼接觸linux已經八年了)。下面這個log是vim的版本信息
$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 16:44:48)
包含補丁: 1-1689
另外的補丁: 8.0.0056
修改者 pkg-vim-maintainers@lists.alioth.debian.org
編譯者 pkg-vim-maintainers@lists.alioth.debian.org
巨型版本 帶 GTK2 圖形界面。
可使用(+)與不可使用(-)的功能:
+acl +farsi +mouse_netterm +tag_binary
+arabic +file_in_path +mouse_sgr +tag_old_static
+autocmd +find_in_path -mouse_sysmouse -tag_any_white
+balloon_eval +float +mouse_urxvt +tcl
+browse +folding +mouse_xterm +terminfo
++builtin_terms -footer +multi_byte +termresponse
+byte_offset +fork() +multi_lang +textobjects
+channel +gettext -mzscheme +timers
+cindent -hangul_input +netbeans_intg +title
+clientserver +iconv +packages +toolbar
+clipboard +insert_expand +path_extra +user_commands
+cmdline_compl +job +perl +vertsplit
+cmdline_hist +jumplist +persistent_undo +virtualedit
+cmdline_info +keymap +postscript +visual
+comments +langmap +printer +visualextra
+conceal +libcall +profile +viminfo
+cryptv +linebreak -python +vreplace
+cscope +lispindent +python3 +wildignore
+cursorbind +listcmds +quickfix +wildmenu
+cursorshape +localmap +reltime +windows
+dialog_con_gui +lua +rightleft +writebackup
+diff +menu +ruby +X11
+digraphs +mksession +scrollbind -xfontset
+dnd +modify_fname +signs +xim
-ebcdic +mouse +smartindent +xsmp_interact
+emacs_tags +mouseshape +startuptime +xterm_clipboard
+eval +mouse_dec +statusline -xterm_save
+ex_extra +mouse_gpm -sun_workshop +xpm
+extra_search -mouse_jsbterm +syntax
系統 vimrc 文件: "$VIM/vimrc"
用戶 vimrc 文件: "$HOME/.vimrc"
第二用戶 vimrc 文件: "~/.vim/vimrc"
用戶 exrc 文件: "$HOME/.exrc"
系統 gvimrc 文件: "$VIM/gvimrc"
用戶 gvimrc 文件: "$HOME/.gvimrc"
第二用戶 gvimrc 文件: "~/.vim/gvimrc"
系統菜單文件: "$VIMRUNTIME/menu.vim"
$VIM 預設值: "/usr/share/vim"
編譯方式: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -pthread -I/usr/include/gtk-2.0 -I/usr/lib/i386-linux-gnu/gtk-2.0/include -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/freetype2 -Wdate-time -g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
鏈接方式: gcc -L. -Wl,-Bsymbolic-functions -Wl,-z,relro -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,-E -Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lnsl -lselinux -lacl -lattr -lgpm -ldl -L/usr/lib -llua5.2 -Wl,-E -fstack-protector-strong -L/usr/local/lib -L/usr/lib/i386-linux-gnu/perl/5.22/CORE -lperl -ldl -lm -lpthread -lcrypt -L/usr/lib/python3.5/config-3.5m-i386-linux-gnu -lpython3.5m -lpthread -ldl -lutil -lm -L/usr/lib/i386-linux-gnu -ltcl8.6 -ldl -lz -lpthread -lieee -lm -lruby-2.3 -lpthread -lgmp -ldl -lcrypt -lm
二、配置vim
從上面的版本信息可以看到,vim啓動的時候會去幾個地方搜索配置文件:一是
配置主要分爲以下幾個部分:
- 顯示相關配置
- 編輯功能配置
- 插件擴展配置
- 系統相關配置
2.1 顯示相關配置
功能 | 語法 |
---|---|
開啓語法高亮 | syntax on |
主題設置 | colorscheme theme_name |
顯示行號 | set number |
突出顯示當前行 | set cursorline |
基本的界面顯示相關的這幾個就夠了,需要進一步擴展的話依賴其他插件(譬如powerline,file explorer,taglist等)。
2.2 編輯功能配置
這一塊主要定義一些快捷鍵,像移動,選擇,標籤操作等。
- 設置編碼
set encoding=utf-8
- 使用鼠標
set mouse=a
- taglist快捷鍵
nnoremap <silent><F4> :TlistToggle<CR>
- 搜索設置
set ignorecase smartcase " 搜索時忽略大小寫,但在有一個或以上大寫字母時仍保持對大小寫敏感
set nowrapscan " 禁止在搜索到文件兩端時重新搜索
set incsearch " 輸入搜索內容時就顯示搜索結果
set hlsearch " 搜索時高亮顯示被找到的文本
- 語法摺疊
set foldenable " 開始摺疊
set foldmethod=syntax " 設置語法摺疊
set foldcolumn=0 " 設置摺疊區域的寬度
setlocal foldlevel=1 " 設置摺疊層數爲
set foldclose=all " 設置爲自動關閉摺疊
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
" 用空格鍵來開關摺疊
- 退格、縮進和刪除
set smartindent " 開啓新行時使用智能自動縮進
set backspace=indent,eol,start
" 不設定在插入狀態無法用退格鍵和 Delete 鍵刪除回車符
- 支持alt鍵加數字切換tab(gvim中使用)
nn <M-1> 1gt
nn <M-2> 2gt
nn <M-3> 3gt
nn <M-4> 4gt
nn <M-5> 5gt
nn <M-6> 6gt
nn <M-7> 7gt
nn <M-8> 8gt
- 切換窗口
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
- NERDTree 切換
map <F3> :NERDTreeToggle<CR>
imap <F3> <ESC>:NERDTreeToggle<CR>
- tags遞歸搜索
set tags=tags;/
2.3 插件擴展
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Bundle 'gmarik/vundle'
Bundle "Lokaltog/vim-powerline"
Bundle "OmniCppComplete"
Bundle 'The-NERD-tree'
" Bundle 'The-NERD-Commenter'
Bundle 'winmanager'
"Bundle 'zencoding-vim'
"Bundle 'vim-plugins'
2.4 系統相關配置
這部分主要是不同平臺的兼容性問題
- 不同平臺的配置文件位置
" return OS type, eg: windows, or linux, mac, et.st..
function! MySys()
if has("win16") || has("win32") || has("win64") || has("win95")
return "windows"
elseif has("unix")
return "linux"
endif
endfunction
" 用戶目錄變量$VIMFILES
if MySys() == "windows"
let $VIMFILES = $VIM.'/vimfiles'
elseif MySys() == "linux"
let $VIMFILES = $HOME.'/.vim'
endif
- 語言環境設置
" 配置多語言環境
if has("multi_byte")
" UTF-8 編碼
set encoding=utf-8
set termencoding=utf-8
set formatoptions+=mM
set fencs=utf-8,gbk "here can add argment to spurt the chinese
if v:lang =~? '^\(zh\)\|\(ja\)\|\(ko\)'
set ambiwidth=double
endif
if has("win32")
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
language messages zh_CN.utf-8
endif
else
echoerr "Sorry, this version of (g)vim was not compiled with +multi_byte"
endif