我的vim配置腳本


  自己的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()}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM