vim操做備忘錄
vim的書籍雖然看不很多,但是總是容易忘記,主要是本身操做總結過少,這個博客就主要用來記錄一些比較常見的術語和操做,以防止本身再次忘記。
<leader>的含義
- <leader> 在vim中默認表示" \ "
- :let mapleader = 「-」 能夠經過如下命令修改爲本身喜歡的鍵。
<c-p>
- 以<c-…開頭的表示:ctrl + …按鍵一塊兒按,例如<c-p> 就是ctrl + p 一塊兒鍵入。
不加載任何vim插件,使用最原始的vim
vim -u NONE -N XXXX.CC
-u NONE 表示不加載.vimrc
-N vim nocompatible vi
windows下的插件均安裝在xxxx\xxxx\vim80(版本號)\colors(以顏色主題爲例)下
ubuntu下均在~/.vim/colors(以顏色爲例),顏色主題啓動均以colorscheme monokai 來啓動。
ubuntu經過vundle進行管理,主體步驟.vimrc---->經過命令if filereadable(expand(xxx))找到vundle的配置文件,並source啓動-------->.vim.bundles------------>set rtp+=xxxx\Vundle.vim 以及call vundle#begin(默認 .vim\bundle)尋找到各種插件
source xxx.vim 用於啓動xxx.vim插件javascript
vim中經常使用配置
-
退格php
-
shiftwidth reindent 操做(<<和>>)時縮進的列數(這裏的一列至關於一個空格)html
-
tabstop 一個tab鍵所佔的列數,linux 內核代碼建議每一個tab佔用8列java
-
softtabstop 敲入tab鍵時實際佔有的列數。python
-
expandtab 輸入tab時自動將其轉化爲空格linux
-
通常用法 :set shfitwidth = 4 softtabstop = 4 expandtab 換行自動縮進4格,softtabstop表示鍵入tab按鈕實際所佔行數,本例所佔4列,expandtab使得tab實際不知足所定義列數,則以空格來湊。web
-
filetype 根據文件後綴名來肯定文件所屬類型,能夠經過set filetype=cpp來強制制定文件所屬類型。
:filetype on 打開 未改變 未改變
:filetype off 關閉 未改變 未改變
:filetype plugin on 打開 打開 未改變
:filetype plugin off 未改變 關閉 未改變
:filetype indent on 打開 未改變 打開
:filetype indent off 未改變 未改變 關閉
:filetype plugin indent on 打開 打開 打開
:filetype plugin indent off 未改變 關閉 關閉
要查看當前的狀態,只需輸入: >
:filetypeshell
-
查看不可見字符
:set invlist
:set nolistubuntu
-
windows 下的vim設置字體
c:\Program Files(x86)\Vim下的_vimrc 添加 set guifont=Consolas:h11
配置文件_vimrc與安裝的插件文件夾colors不在一個文件中,其餘均在Vim\vim80\ 之下vim
映射
- inoremap就只在插入(insert)模式下生效
- vnoremap只在visual模式下生效
- nnoremap就在normal模式下(狂按esc後的模式)生效
- 在vim打開文件norm6al模式下鍵入 :help nnoremap,得出如下提示
- :nn[oremap] {lhs} {rhs} |mapmode-n| :nn *:nnorem
- 在映射命令做用的模式中把鍵序列 {lhs} 映射爲 {rhs}
- 以YouCompleteMe的映射跳轉定義的使用用例以下:
- nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳轉到定義處
高效修改符號內的字符
ci’、ci"、ci(、ci[、ci{、ci< - 分別更改這些配對標點符號中的文本內容
di’、di"、di(或dib、di[、di{或diB、di< - 分別刪除這些配對標點符號中的文本內容
yi’、yi"、yi(、yi[、yi{、yi< - 分別複製這些配對標點符號中的文本內容
vi’、vi"、vi(、vi[、vi{、vi< - 分別選中這些配對標點符號中的文本內容
it : 選擇xml標籤內部內容,例如
tags
,高亮tags
at:選擇一對xml標籤,例如
tags
,高亮全部內容
將工做區分割成窗口
命令 |
用途 |
<C-w>s |
水平切分當前窗口,新窗口仍顯示當前緩衝區 |
<C-w>v |
垂直切分當前窗口,新窗口仍顯示當前緩衝器 |
:sp[lit] {file} |
水平切分當前窗口,新窗口中載入{file} |
:vsp[lit] {file} |
垂直切分當前窗口,新窗口中載入{file} |
命令 |
用途 |
<C-w>w |
在窗口間切換 |
<C-w>h |
切換到左邊的窗口 |
<C-w>j |
切換到下面的窗口 |
<C-w>k |
切換到上面的窗口 |
<C-w>l |
切換到右邊的窗口 |
Ex命令 |
普通模式命令 |
用途 |
:clo[se] |
<C-w>c |
關閉活動窗口| |
:on[ly] |
<C-w>o |
只保留活動窗口 |
命令 |
用途 |
<C-w>= |
使全部窗口等高等寬(經常使用於恢復) |
<C-w> - |
減小窗口中的一行 |
<C-w> + |
增長窗口中的一行 |
<C-w>_ |
最大化窗口中的行(高度) |
<C-w>| |
最大化窗口的列 |
[N]<C-w>_ |
窗口中的行(高度)設置爲N |
[N]<C-w>| |
最大化窗口的列設置爲N |
在標籤中切換
瀏覽Quickfix列表
命令 |
用途 |
:cnext |
跳轉到下一項 |
:cprev |
跳轉到上一項 |
:cfirst |
跳轉到第一項 |
:clast |
跳轉到最後一項 |
:cc N |
跳轉到第N項 |
:copen |
打開quickfix窗口 |
:cclose |
關閉quickfix窗口 |
:cnfile |
下一個文件的第一項 |
:cpfile |
上一個文件的最後一項 |
ctrl+i:進入定義或聲明之處
ctrl+o:跳出定義或聲明之處
YCM中採用vim的jumplist
單詞,字符串之間跳躍
b:反向跳躍到單詞首字符
B:反向跳躍到字符串首字符
w:正向跳躍到單詞首字符
W:正向跳躍到字符串首字符
e:正向跳躍到字符末尾字符
E:正向跳躍到字符串末尾字符
ge:跳躍到上一個字符末尾
gE:跳躍到上一個字符串末尾
顯示
zt:當前行顯示到頂部
zz:當前行顯示到屏幕中間
3H:跳到頂部第三行
5L:調到底部第五行
面向字符,行,列操做
- v:面向字符,配合b,w,e,ge能夠快速選擇而且匹配
- caw,yaw,daw:面向單詞級別的處理
- V:面向行處理,Vr|,將一行所有轉換成|
- ctrl+v:面向列處理,c-v3j,連續選擇下面三列同位置,包含最初一行
- shift+i 在所選高亮區域前插入,shift+a 在所選高亮區域後覺得插入
- gv:重複選擇上次的高亮區域
- gU{motion},motion好比:it,V等,大寫所選內容,gUgU大寫所在行
- gu{motion},motion好比:it,V等,小寫所選內容,gugu小寫所在行
- i:當前光標前插入,I行首插入
- a:當前光標後插入,A行末插入
- o:切換高亮選區的活動端
vim比較文件方法
-
- vimdiff FILE_LEFT FILE_RIGHT
- vim -d FILE_LEFT FILE_RIGHT
-
- vim FILE_LEFT
- :vertical diffsplit FILE_RIGHT
-
- [c
- ]c
- :set noscrollbind
- :diffupdate 更新以後,須要手動同步
-
- :diffthis
-
- 合併文檔:
- dp 將差別點的當前文檔內容應用到另外一文檔(diff put)
- do 將差別點的另外一文檔的內容拷貝到當前文檔(diff get)
- 上下文的展開和查看
- 比較和合並文件的時候常常須要結合上下文來肯定最終要採起的操做。Vimdiff 缺省是會把不一樣之處上下各 6 行的文本都顯示出來以供參考。其餘的相同的文本行被自動摺疊。若是但願修改缺省的上下文行數爲3行,能夠這樣設置:
- :set diffopt=context:3
- 能夠用簡單的摺疊命令來臨時展開被摺疊的相同的文本行:
- zo (folding open, z這個字母看上去比較像摺疊的紙)
- 而後能夠用下列命令來從新摺疊:
- zc (folding close)
-
常見須要掌握的vim操做
- 不按Esc而是按[或者c,速度快不少
- 學會幾個定位鍵的區別:0, $, {, }, g, G, w, e, b…
- o, O分別是當前位置下面/上面插入一個新行並進入插入狀態
- Shift+V選定幾行,而後用 一塊兒移動
- Ctrl+V選定行首或行尾的字符,而後用shift+i作插入,或者shift+x作刪除
- 學會用y,d 和p, P作粘貼剪切
- 學會用^W的窗口操做。打開文件用sp或者vs
- 學會記錄宏的命令。用q加任意鍵開始錄製,再按q保存。而後可用@加這個任意鍵回放,在@前加數字可定義回放次數。
- "."重複上一個命令,「u"取消上一個命令,」^r"反取消
- ^n, ^p用buf裏的關鍵詞補全。
- 學會搜索替換":%s/要搜的東西/要換成的東西/g"
- 任什麼時候候移到一個單詞上按#的話能夠高亮這個文檔裏全部同樣的單詞
- 用「/」作搜索, 按n或N 上一個/下一個
- ":!命令 &「可直接運行這個命令,用」:!命令 %&"若是你想讓這個命令對當前所編輯文件作操做。
- 任什麼時候候可用":cd %:p:h"來切換目錄到當前編輯文件所在目錄。
vimscript中不錯的語句小結
-
- autocmd BufRead,BufNewFile *.py let python_highlight_all = 1
-
- au FileType python setlocal formatprg=autopep8\ -
- autocmd FileType c,cpp,java,go,php,javascript,puppet,python,rust,twig,xml,yml,perl autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()
- autocmd ! 清除vimcrc組所有的自動命令
-
- #快捷鍵函數映射
- map <F3> :call FormatSrc()<CR><CR>
- func FormatSrc()
- exec "w"
- if &filetype == 'py' || &filetype == 'python'
- exec "r !autopep8 -i --aggressive --aggressive %" 」讀取該命令執行後的結果
- endif
- exec "e! %" 「編輯當前文件:不管緩存區裏是否已經更改,考慮多人編輯文檔的狀況
- endfunc
-
- noremap <F3> :Autoformat<CR>
- au BufWrite * :Autoformat
-
-
- au FileType python let &l:formatprg='autopep8 -a -a -'
-