自己的VIM 配置腳本,擁有自主獨立知識產權(參考了一點別人的),只使用了一個插件ctags ,主要實現了一下功能:
- 自動補全括號,雙引號,單引號,包括{},(),"" , ''只要輸入符號的左邊部分,自動補全,並以插入模式自動將光標移動到符號內部
- 在{},() 內部按下Enter鍵,自動換兩行,並將光標移動到兩行中的第一行,並完成自動縮進
- 命令模式下,快捷鍵"s",保存文件,保存文件的同時,自動刷新tags,按下ctrl+]和ctrl+t 實現函數 ,結構體 , 類的自動跳轉和返回。
- 命令模式下,快捷鍵"q",退出VIM
- 在插入模式,光標右邊是},),",',按下Tab鍵自動跳出該符號,如果不知這些符號,完成縮進動作
- 在命令模式,按下"t",列出所有打開的文件
- 在命令模式,按下";",調出命令輸入行
- 在命令模式,按下<- 和->可以在打開的Buffer之間切換
- 可以用鼠標點擊
- 高亮光標所在行
- 狀態高亮顯示當前打開文件信息
- F4關閉當前Buffer
其他更復雜的配置,以后慢慢補充
"設置幫助文檔為中文 set helplang=cn "設置編碼 set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1 "高亮顯示 syntax enable syntax on "顯示行數 set number "設置tab鍵 set tabstop=4 "設置縮進 set softtabstop=4 set shiftwidth=4 "設置自動縮進 set autoindent set cindent "不產生swap文件和備份文件 set noswapfile set nobackup "設置檢查拼寫(感覺用着沒有啥子效果) "set spell "顯示光標所在行號 set cursorline "顯示光標所在行號和列號 set ruler "鼠標可以在buffer中點擊 set mouse=a set showmode "高亮搜索關鍵字 set hlsearch "智能搜索 set incsearch "搜索忽略大小寫 set ignorecase "顯示輸入的命令 set showcmd "打開文件類型檢測 filetype on filetype plugin on "設置常用符號自動補全(注意:inore是指 vim的各種工作模式) inoremap ( ()<ESC>i inoremap [ []<ESC>i inoremap " ""<ESC>i inoremap ' ''<ESC>i inoremap { {}<ESC>i "自定義快捷鍵(注意這里的<cr>表示字符’<‘c'‘r’>,在配置腳本中等同於Enter鍵) "保存和退出 nmap s :w<cr> nmap q :q<cr> "使用左右方向鍵在不同buffer之間的切換 nmap <Left> :bp<CR> nmap <Right> :bn<CR> "F4關閉當前buffer nmap <F4> :bd<CR> nmap f :e "在打開的文件之間互相切換 nmap t :ls<cr> nmap b :b nmap ; : "在編輯模式下,按下'{'或'(',括號將自動補全,光標移動到括號中,如果按下'Enter'鍵,實現自動換行並縮進 inoremap <CR> <C-R>=Enterskip()<CR> function Enterskip() let char = getline(".")[col(".") - 1] if char == '}' || char == ')' return "\<CR>\<ESC>O" else return "\<CR>" endif endf "在編輯模式下,如果在當光標右邊是下面這些符號,按下'Tab'鍵,自動跳出括號,反之正常的tab鍵功能 inoremap <Tab> <C-R>=Tabskip()<CR> function Tabskip() let char = getline(".")[col(".") - 1] if char == '}' || char == ']' || char == '"' || char == '>' || char == ')' || char == "'" return "\<Right>" else return "\<Tab>" endif endf "待定腳本(還沒搞明白的腳本) "inoremap ] <c-r>=ClosePair(']')<CR>(這條腳本待定) "inoremap < <><LEFT> "inoremap * **<LEFT> "只針對c,cpp文件才使用大括號跨行自動補全功能 "inoremap ) <c-r>=ClosePair(')')<CR> "autocmd FileType c,cpp,go inoremap { {<CR>}<ESC>O "針對sh 文件使用大括號當前行自動補全功能 "autocmd FileType sh inoremap { {}<ESC>i "inoremap } <c-r>=ClosePair('}')<CR> "function! ClosePair(char) " if getline('.')[col('.') - 1] == a:char " return "\<Right>" " else " return a:char " endif "endfunction "ctags 自動補全(每次保存文件的時候執行ctags -R) "--languages=c++,c,java,Make,Sh, 就是制定了本次ctags掃描的語言是什么 "--c++-kinds=+px 指示ctags掃描一些函數聲明 autocmd BufWritePost * call system("ctags --tag-relative=yes -f ~/.tagsdir/tags -R --languages=c++,c,Java,Make,Sh, --c++-kinds=+px --fields=+aiKSz --extra=+q") "autocmd BufWritePost * call system("ctags --tag-relative=yes -f /home/satan/.tagsdir/tags -R *") "因為每次保存文件的時候,都會刷新tags文件,但是都是在文件所在文件的當前文件夾下刷新,這樣下次使用跳轉的時候,會出現多個選擇,所以直接指定一個tags生成的文件夾 set tags=/home/satan/.tagsdir/tags set autochdir " 在狀態欄顯示當前文件的相關信息 set laststatus=2 " 總是顯示狀態欄 highlight StatusLine cterm=bold ctermfg=black ctermbg=yellow " 獲取當前路徑,將$HOME轉化為~ function! CurDir() let curdir = substitute(getcwd(), $HOME, "~", "g") return curdir endfunction set statusline=[%n]\ %f%m%r%h\ \|\ \ pwd:\ %{CurDir()}\ \ \|%=\|\ %l,%c\ %p%%\ \|\ ascii=%b,hex=%b%{((&fenc==\"\")?\"\":\"\ \|\ \".&fenc)}\ \|\ %{$USER}\ @\ %{hostname()}