VIM完全配置

一、說說這個編輯器

不得不說,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啓動的時候會去幾個地方搜索配置文件:一是VIM/vimrc HOME/.vimrc;三是其他一些地方。用戶自己的配置文件就放在$HOME/.vimrc。下面就來看一份.vimrc。我現在用的配置是基於網上一份配置改的,找不到出處了,寫着是2010年版本的。

配置主要分爲以下幾個部分:

  1. 顯示相關配置
  2. 編輯功能配置
  3. 插件擴展配置
  4. 系統相關配置

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
發佈了146 篇原創文章 · 獲贊 81 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章