趁著臺風,在家學習學習vi
vim的配置
- .vimrc文件是vim的配置文件,位于~/.vimrc, vim的字體 快捷鍵 插件 均可通過配置文件配置
前綴鍵;各類 vim 插件幫助文檔中經常出現 <leader>,即,前綴鍵。vim 自帶有很多快捷鍵,再加上各類插件的快捷鍵,大量快捷鍵出現在單層空間中難免引起沖突,為緩解該問題,引入了前綴鍵 <leader> , 默認的前綴鍵是\
" 定義快捷鍵的前綴,即<Leader>
let mapleader=";"
- 插件管理
.vim/ 目錄是存放所有插件的地方。vim 有一套自己的腳本語言 vimscript,通過這種腳本語言可以實現與 vim 交互,達到功能擴展的目的。一組 vimscript 就是一個 vim 插件,vim 的很多功能都由各式插件實現。
vim 插件目前分為 *.vim 和 *.vba 兩類,前者是傳統格式的插件,實際上就是一個文本文件,通常 someplugin.vim(插件腳本)與 someplugin.txt(插件幫助文件)并存在一個打包文件中,解包后將 someplugin.vim 拷貝到 ~/.vim/plugin/ 目錄,someplugin.txt 拷貝到 ~/.vim/doc/ 目錄即可完成安裝,重啟 vim 后剛安裝的插件就已經生效,但幫助文件需執行 :helptags ~/.vim/doc/ 才能生效,可通過 :h someplugin 查看插件幫助信息。傳統格式插件需要解包和兩次拷貝才能完成安裝,相對較繁瑣,所以后來又出現了 *.vba 格式插件,安裝便捷,只需在 shell 中依次執行如下命令即可
vim someplugin.vba
:so %
:q
不論是直接拷貝插件到目錄,還是通過 *.vba 安裝,都不便于插件卸載、升級,后來又出現了管理插件的插件 vundle。
我希望每個插件在 .vim/ 下都有各自獨立子目錄,這樣需要升級、卸載插件時,直接找到對應插件目錄變更即可;另外,我希望所有插件清單能在某個配置文件中集中羅列,通過某種機制實現批量自動安裝/更新/升級所有插件。vundle(https://github.com/VundleVim/Vundle.vim )為此而生,它讓管理插件變得更清晰、智能。
vundle 會接管 .vim/ 下的所有原生目錄,所以先清空該目錄,再通過如下命令安裝 vundle
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
接下來在 .vimrc 增加相關配置信息
" vundle 環境設置
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
" vundle 管理的插件列表必須位于 vundle#begin() 和 vundle#end() 之間
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'altercation/vim-colors-solarized'
" 插件列表結束
call vundle#end()
filetype plugin indent on
其中,每項
Plugin 'altercation/vim-colors-solarized'
對應一個插件,后續若有新增插件,只需追加至該列表中即可;
需要安裝插件,先找到其在 github.com 的地址,再將配置信息其加入 .vimrc 中的call vundle#begin() 和 call vundle#end() 之間,最后進入 vim 執行
:PluginInstall
便可通知 vundle 自動安裝該插件及其幫助文檔。
要卸載插件,先在 .vimrc 中注釋或者刪除對應插件配置信息,然后在 vim 中執行
:PluginClean
即可刪除對應插件。插件更新頻率較高,差不多每隔一個月你應該看看哪些插件有推出新版本,批量更新,只需執行
:PluginUpdate
Vim操作
移動
- hjkl
- gg 文件第一行
- G 文件最后一行
- 123+G 跳轉到指定行 ( 4% 數字+% 按百分比跳轉 )
- H/M/L 跳轉到當前屏幕的 頂部/中間/底部
- ^ 移動到行首第一個非空白, 0 移動到行首
- $ 移動到行尾 (^ $ 和正則一樣)
- % 移動到當前代碼區塊的開始/結尾(匹配(),[],{})
- ctrl + g 查看當前文件總行數
按單詞移動
- w / b 下一個/上一個 單詞詞首
- W / B 下一個/上一個 字符串頭
- e / ge 下一個/下一個 單詞詞尾
- E / gE 下一個/上一個 字符串尾部
上面這些命令都使用’iskeyword‘選項中的字符來確定單詞的分界,還有幾個命令,只把空白字符當做”單詞“的分界。當然,這里說的”單詞“已經不是傳統意義上的單詞了,而是由非空白字符構成一串字串
查找
- /xxx 查找光標后的單詞 xxx
- ?xxx 查找光標前的單詞 xxx
- n / N 移動到下一個/上一個 匹配
- ftext 在當前行向前查找text
- Ftext 在當前行向后查找text
- :g/text/command 在所有包含text的行運行command所表示的命令
- :v/text/command 在所有不包含text的行運行command所表示的命令
vim保存了查找歷史, 在輸入 / 或 ? 后, 可以通過 <C-p> 和 <C-n> 或者上下光標鍵, 翻看歷史記錄, 再次查找
另外你還可以使用 q/ 和 q? 命令,在vim窗口最下面打開一個新的窗口,這個窗口會列出你的查找歷史記錄,你可以使用任何vim編輯命令對此窗口的內容進行編輯,然后再按回車,就會對光標所在的行的內容進行查找。
vim中有許多與查找相關的選項設置,其中最常用的是incsearch(輸入內容時, 即對輸入的內容開始匹配) ,hlsearch(高亮), ignorecase(忽略大小寫)。
替換 ( :s 命令)
:[range]s/from/to/[flags]
range
:范圍,如果沒有指定范圍,則作用于但前行。
- :1,10s/from/to/ 表示在第1到第10行(包含第1,第10行)之間搜索替換;
- :10s/from/to/ 表示只在第10行搜索替換;
- :%s/from/to/ 表示在所有行中搜索替換;
- 1,$s/from/to/ 同上。
flags
有如下四個選項
- c confirm,每次替換前詢問;
- e error, 不顯示錯誤;
- g globle,不詢問,全部替換。如果不加 g 選項,則只替換每行的第一個匹配到的字符串;
- i ignore,忽略大小寫。
這些選項可以合并使用,如 cgi 表示不區分大小寫,全部替換,替換前詢問。
- & 重復執行最后的 :s (替換)命令
執行Shell命令
:!ls -al
撤銷
- u 撤銷上一次操作
- Ctrl+r 恢復上一步被撤銷的操作
刪除
- x 刪除當前字符
- X 刪除光標前的字符, 前面可以加數字
- dw 刪除一個詞
- dd 刪除當前行
復制, 粘貼, 剪切
選中文字
- v+光標移動 (按字符選擇)高亮選中所要的文本,然后進行各種操作(比如,d表示刪除)。
- V (按行選擇)
- v+選中的內容+c 更改選中的文字
復制 :y(ank)
- y 用v命令選中文本后,用y進行復制
- yy 復制當前行, 等同于(Y)
- y0 復制當前位置到行首
- y$ 復制當前位置到行末
粘貼
- p 在光標位置之后粘貼
- P 在光標位置之前粘貼
剪切
- v + 選中的內容 + d 剪切
剪切板
簡單的復制粘貼
vim提供12個剪貼板,它們的名字分別為vim有11個粘貼板,分別0,1, 2 ... 9, a, "; 如果開啟了系統剪貼板,則會另外多出兩個 + 和 *。使用 :reg 命令,可以查看各個粘貼板里的內容。
:reg
在vim中簡單用y只是復制到 " (雙引號)粘貼板里,同樣用p粘貼的也是這個粘貼板里的內容。復制和粘貼到指定剪貼板
要將vim的內容復制到某個粘貼板,需要退出編輯模式,進入正常模式后,選擇要復制的內容,然后按 "Ny 完成復制,其中N為粘貼板號(注意是按一下雙引號然后按粘貼板號最后按y),例如要把內容復制到粘貼板a,選中內容后按 "ay 就可以了。
要將vim某個粘貼板里的內容粘貼進來,需要退出編輯模式,在正常模式按 "Np ,其中N為粘貼板號。比如,可以按 "5p 將5號粘貼板里的內容粘貼進來,也可以按 "+p 將系統全局粘貼板里的內容粘貼進來。系統剪切板
Vim支持系統剪貼板,需要打開clipboard功能。使用下面的命令,檢查當前版本的Vim,是否支持clipboard。
$ vim --version
如果不支持的話,需要安裝圖形化界面的vim(即gvim),或者重新編譯vim。
$ sudo apt-get install vim-gnome
另一種方法,是安裝vim-gui-common。
$ sudo apt-get install vim-gui-common
縮進文本
選項 | 作用 |
---|---|
^i(ctrl+i)或tab | 插入文本時,插入移動的寬度,移動寬度是事先定義好的 |
:set ai | 打開自動縮進 |
:set sw=n | 將移動寬度設置為n個字符 |
n<< | 使n行都向左移動一個寬度 |
n>> | 使n行都向右移動一個寬度,例如 3>> 就將接下來的三行每行都向右移動一個移動寬度 |
多窗口
參考:
[https://github.com/yangyangwithgnu/use_vim_as_ide#0.1]
[http://easwy.com/blog/archives/advanced-vim-skills-basic-move-method/]
[https://github.com/ruanyf/articles/blob/master/dev/vim/operation.md]
[http://tanqisen.github.io/blog/2013/01/13/vim-search-replace-regex/]