由於經常使用 vim 編輯配置文件,有時候也會進行使用vim 編寫一些腳本和c/c++ 程式,所以配置一個常用的 vim 是很是必要的。這篇博文主要是記錄vim使用和配置相關的一些知識點。 關於vim : vim 是比較好用的編輯器,很多linux server 都自帶vi, vim 是vi 的升級 ...
由於經常使用 vim 編輯配置文件,有時候也會進行使用vim 編寫一些腳本和c/c++ 程式,所以配置一個常用的 vim 是很是必要的。這篇博文主要是記錄vim使用和配置相關的一些知識點。
關於vim :
vim 是比較好用的編輯器,很多linux server 都自帶vi, vim 是vi 的升級版本。可以方便在linux 環境中進行安裝和配置。vim主要功能是編寫,並且有很好的擴展性。通過配置可以優化出適合自己的一種vim,並且可以把配置文件儲存到github或者遠程伺服器上,當進入新的環境之中,只需要幾行簡單的命令,就可以還原配置。vim 有三種模式: 一般模式,編輯模式,命令行模式。通過快捷鍵 esc, : 可以方便得在三種模式下進行切換。如果想詳細得瞭解 vim的使用可以閱讀 《VIM USER MANUAL》,不過你只閱讀本博文也是可以的。
vim 相關文件:
- .viminfo :
- 在vim中操作的行為,vim會自動記錄下來,保存在 ~/.viminfo 文件中。 這樣為了方便下次處理, 如:vim打開文件時,游標會自動在上次離開的位置顯示。 原來搜索過的字元串,新打開文件時自動高亮顯示。 ~/.viminfo 文件是系統自動生成。
- .vimrc :
- vimrc文件是vim的環境設置文件。 整體的vim的設置是在 /etc/vimrc 文件中。 不建議修改/etc/vimrc 文件,每個用戶可以在用戶根目錄中設置vim,新建 ~/.vimrc
- .vim目錄:
- .vim/ 目錄是存放所有插件的地方。vim 有一套自己的腳本語言 vimscript,通過這種腳本語言可以實現與 vim 交互,達到功能擴展的目的。一組 vimscript 就是一個 vim 插件,vim 的很多功能都由各式插件實現。此外,vim 還支持 perl、python、lua、ruby 等主流腳本語言編寫的插件,前提是 vim 源碼編譯時增加 ---enable-perlinterp、--enable-pythoninterp、--enable-luainterp、--enable-rubyinterp 等選項。vim.org 和 github.com 有豐富的插件資源,任何你想得到的功能,如果 vim 無法直接支持,那一般都有對應的插件。
vim 常用快捷鍵:
- 基本操作:
-
- 移動:方向鍵,h, j, k, l ; 可與數字組合使用 10j, 向下10個字元, 20l:向右20個字元 ; 0 移動到行首,$ 移動到行尾; nG n為數字,移動到第n行
- 單詞為單位移動:w 正向移動到相鄰單詞的首字元、b 逆向移動到相鄰單詞的首字元、e 正向移動到相鄰單詞的尾字元、 ge 逆向移動到相鄰單詞的尾字元;配合查找字元的方式移動:fa 正向移動到第一個字元 a 處、Fa 逆向移動到第一個字元 a 處。非相鄰的單詞或字元間移動,你可以配合數字參數,如,正向移動到相隔八個單詞的首字元執行 8w、逆向移動到第四個 a 字元處執行 4Fa。
- 翻頁:Ctrl + f 向下翻一頁 ; Ctrl + b 向上一頁; Ctrl + d 向下半頁 ; Ctrl + u 向上半頁
- 查找:/word 向下查找 word ; ?word 向上查找word; n 重覆前一次查找 ; N 重覆前一次查找,反向進行
- 刪除:x 向後刪除一個字元; X 向前刪除一個字元; nx n為數字,向後刪除n個字元; dd 刪除當前行; ndd n為數字,刪除n行
- 複製:yy 複製當前行; nyy n為數字,複製向下的n行 ; y1G 複製從第一行到當前行; yG 複製當前行到最後一行 ; y0 複製從行首到游標之間的字元; y$ 複製游標所在到行尾之間的字元
- 粘貼:p 粘貼到下一行; P 粘貼到上一行; J 將當前行和下一行合併成一行; u 還原上次操作 ; Ctrl+r 重做上一個操作; . 小數點,重覆前一個操作
- 編輯:i 游標所在處插入; I 當前行第一個非空字元出插入; a 游標下一個字元開始; o 下一行開始; O 上一行開始 : 進入編輯模式, esc 退出編輯模式;
- 保存::w 保存文件; :w! 強制保存; :q 退出vim; :q! 退出不保存文件; :wq退出並保存文件, : 表示進入命令行模式, esc 退出命令行模式。
- 命令行: :! command 執行命令, 如 “:! ls -l” 列出當前目錄文件; 當你發現打開文件時沒有 保存許可權的時候,可以通過命令行模式獲取root 身份,w 保存文件。
- vim 保存readonly 文件::w !sudo tee % : 運行外部shell命令,用 tee 把當前stdin緩衝區的數據寫到當前文件(%)
- 幫助信息: :h 查看幫助信息, :h 插件 查看對應插件的幫助信息。
- 快速搜索:游標停留在想要查找的單詞的任意一個字母上面, 然後輸入Shift + * 或者 Shift+# ,即可以向下和向上搜索游標所在的詞,並且可以通過 n 或 N 進行上一個或下一個的匹配。此方法所有匹配單詞會高亮,要取消高亮,輸入:noh 來取消高亮.
2. 塊操作:
-
- 進入: v, V, ctrl + v
- 選擇:v 字元選擇,游標經過的地方反白選擇; V 行選擇,游標經過的整行反白選擇;Ctrl+v 塊選擇,長方形的方式選擇
- 複製,粘貼,刪除:y 將選中的地方複製; d 將選中的地方刪除;p 進行粘貼
3. 多模式編輯
-
- 編輯下一個文件 :n
- 編輯上一個文件:N
- 列出文件: files
- 打開多個文件:vim file1 file2 , 文件之間可以進行互相複製,通過vim。這樣在server中操作極為方便。
4. 多視窗編輯:
-
- Ctrl+w+j :移動下方視窗,先按Ctrl+w放開,然後 j 或者↓鍵
- Ctrl+w+k :移動上方視窗
- Ctrl+w+q :退出文件,同 :q
- :sp [filename] :打開新視窗,filename可以為空,為空打開當前文件
vim 常用配置選項:
- set nu : 顯示行號 , 取消:set nonu
- set ruler: 顯示狀態欄,右下角, 取消: set noruler
- 等,具體使用 可參見 我的vim 配置:
vim配置(myself):
" vim 自身功能配置 set nu " line number set cursorline " row line set cursorcolumn "col line set hlsearch set laststatus=2 set nowrap " 前導鍵 let mapleader=";" " 基礎配置 " filetype plugin on " 命令映射,<Leader> 表示前導鍵 nmap LB 0 nmap LE $ nmap <Leader>q :q<CR> nmap <Leader>w :w<CR> nmap <Leader>Q :qa!<CR> " 設置快捷鍵遍歷子視窗 " " 依次遍歷 nnoremap nw <C-W><C-W> " 跳轉至右方的視窗 nnoremap <Leader>lw <C-W>l " 跳轉至方的視窗 nnoremap <Leader>hw <C-W>h " 跳轉至上方的子視窗 nnoremap <Leader>kw <C-W>k " 跳轉至下方的子視窗 nnoremap <Leader>jw <C-W>j " 讓配置變更立即生效 autocmd BufWritePost $MYVIMRC source $MYVIMRC " 實時搜索 set incsearch " vim 自動補全 set wildmenu " 關閉相容模式 set nocompatible " vundle required " 插件安裝 " vundle 環境設置 filetype off set rtp+=~/.vim/bundle/Vundle.vim " vundle 管理的插件列表必須位於 vundle#begin() 和 vundle#end() 之間 call vundle#begin() " let Vundle manage Vundle, required Plugin 'VundleVim/Vundle.vim' Plugin 'altercation/vim-colors-solarized' Plugin 'octol/vim-cpp-enhanced-highlight' Plugin 'Lokaltog/vim-powerline' Plugin 'scrooloose/nerdcommenter' Plugin 'SirVer/ultisnips' Plugin 'honza/vim-snippets' Plugin 'scrooloose/nerdtree' Plugin 'sjl/gundo.vim' Plugin 'Valloric/YouCompleteMe' "Plugin 'Valloric/YouCompleteMe' " 插件列表結束 call vundle#end() filetype plugin indent on " code scheme syntax enable syntax on " set background=light " colorscheme solarized " powerline scheme let g:Powerline_colorscheme='solarized256' " 代碼縮進 " 設置編輯時製表符占用空格數 set tabstop=4 " 設置格式化時製表符占用空格數 set shiftwidth=4 " 自適應不同語言的智能縮進 filetype indent on " 基於縮進或語法進行代碼摺疊 set foldmethod=indent "set foldmethod=syntax set nofoldenable " vim-snippets " let g:UltiSnipsExpandTrigger="<tab>" " let g:UltiSnipsJumpForwardTrigger="<c-b>" " let g:UltiSnipsJumpBackwardTrigger="<c-z>" let g:UltiSnipsExpandTrigger="<leader><tab>" let g:UltiSnipsJumpForwardTrigger="<leader><tab>" let g:UltiSnipsJumpBackwardTrigger="<leader><s-tab>" let g:UltiSnipsEditSplit="vertical" " 啟用:Man命令查看各類man信息 source $VIMRUNTIME/ftplugin/man.vim " " " 定義:Man命令查看各類man信息的快捷鍵 nmap <Leader>man :Man 3 <cword><CR> " 使用 NERDTree 插件查看工程文件。設置快捷鍵,速記:file list nmap <Leader>fl :NERDTreeToggle<CR> " 設置 NERDTree 子視窗寬度 let NERDTreeWinSize=22 " 設置 NERDTree 子視窗位置 let NERDTreeWinPos="right" " 顯示隱藏文件 let NERDTreeShowHidden=1 " NERDTree 子視窗中不顯示冗餘幫助信息 let NERDTreeMinimalUI=1 " 刪除文件時自動刪除文件對應 buffer let NERDTreeAutoDeleteBuffer=1 " 調用 gundo 樹 nnoremap <Leader>ud :GundoToggle<CR> " YCM 補全菜單配色 " 菜單 highlight Pmenu ctermfg=2 ctermbg=3 guifg=#005f87 guibg=#EEE8D5 " 選中項 "highlight PmenuSel ctermfg=2 ctermbg=3 guifg=#AFD700 guibg=#106900 " 補全功能在註釋中同樣有效 let g:ycm_complete_in_comments=1 " 允許 vim 載入 .ycm_extra_conf.py 文件,不再提示 let g:ycm_confirm_extra_conf=0 " 開啟 YCM 標簽補全引擎 let g:ycm_collect_identifiers_from_tags_files=1 " 禁止緩存匹配項,每次都重新生成匹配項 let g:ycm_cache_omnifunc=0 " " 語法關鍵字補全 let g:ycm_seed_identifiers_with_syntax=1
本配置是參考網路上的配置方式來進行配置的,使用了 vundle 插件來管理vim 插件。 重定義了前導鍵:; , 使用了 的插件基本上來自github ,如果你們不明白具體的插件的作用,請訪問github主頁進行查詢插件功能和配置方式。
配置功能如下:
- 美化界面
- 快速註釋功能
- 模板補全功能
- 工程瀏覽功能
- 代碼補全功能
具體快捷方式,請看配置。配置好的vim 界面如下圖:
vim 環境配置主要是方便伺服器或者字元界面下的使用,現在圖形界面上也有很多優秀的工具像 vscode, atom 等。總之,怎麼方便怎麼來; 如果你覺得本文對你有幫助,請點擊右下角的推薦支持作者。
GitHub Repo : Vim 環境自動化配置腳本:https://github.com/yaowenxu/envfile/tree/master/vim
保持更新,轉載請註明出處。