做中學之學用學用Vim
Vim
Vim是一個非常好的文本編輯器,很多專業程序員使用Vim編輯代碼,即使以后你不編寫程序,只要跟文本打交道,都應該學學Vim,可以瀏覽參考一下普通人的編輯利器——Vim這篇文章,看看Vim可以如何用。
Vim學習曲線非常陡峭,各種編輯器學習曲線如下圖(有調侃的意思):
Vim跟五筆打字很類似,不會的時候好象很高大上,感覺學起來很難,其實不然。我建議大家通過“做中學”來學習Vim,你會發現Vim學起來相當簡單,掌握三五個命令就可以用起來了。具體來說通過VimTUTOR甚至玩游戲(Vim大冒險或PacVim)來學習。
VimTUTOR是個實踐教程,通過實踐30分鍾讓你對Vim編輯器入門,只要在命令行中輸入Vimtutor,然后跟着教程練習就可以了。如下圖:
然后你可以把這張圖做計算機的桌面背景,參考《簡明 Vim 練級攻略》每天學習一兩個鍵,一兩周就可以很好的用Vim了:
IT相關的同學可以看看程序員專用的Vim鍵盤圖:
程序員有幾個鍵提示一下:
-
大寫“K”可以用來查找函數的幫助信息:查看 man page,命令模式下,將光標放在函數名上,按"K"可以直接察看 man page。
-
幾個設置
- :set nu 顯示行號
- :set ai 自動縮行
- :set ts=4 設置一個 TAB 鍵等於幾個空格
-
移動光標
- [[ 轉到上一個位於第一列的"{"
- ]] 轉到下一個位於第一列的"{"
- { 轉到上一個空行
- } 轉到下一個空行
-
gd 轉到當前光標所指的局部變量的定義
-
一個項目中總會有多個文件,多文件操作是編程必備技能
- 多buffer: vi a.c b.c c.c
:e filename
進入Vim后,打開其他文件:n
,:N
前后切換:bn
,:bp
前后循環切換:files
,:buffers
或:ls
可以列出目前緩沖區中的所有文件+
表示緩沖區已經被修改過了的文件#
代表上一次編輯的文件%
是目前正在編輯中的文件:b
文檔名或編號 切換至該文件
- 多view: vi -o a.c b.c c.c
:spilit
(:sp
),:vspilit
(:vsp
) 切分viewCtrl+w, w
循環view切換Ctrl+w,方向鍵
切換到前/下/上/后一個viewCtrl+w,h/j/k/l
切換到前/下/上/后一個viewCtrl+w,=
讓上下左右view等寬等高Ctrl+w,_
當前view高度擴展到最大Ctrl+w,|
當前view寬度擴展到最大Ctrl+w,c
:關閉當前view
- 多 tab(較少用)
:tabnew [++opt選項] [+cmd] file
新tab中打開文件:tabc
關閉當前的tab:tabo
關閉其他的tab:tabs
查看所有打開的tab:tabn
切換到后一個tab:tabp
切換到前一個tabngt
切換到后n個tabngT
切換到前n個tab
- 多buffer: vi a.c b.c c.c
Vim配置
剛安裝好的Vim是難看又難用,通過配置和安裝插件,Vim可以變成神器。
~/.Vimrc
是Vim的配置文件,通過.Vimrc文件你可以控制Vim的外觀、字體、操作方式、快捷鍵、插件屬性等。
上面提到幾個設置:
- :set nu 顯示行號
- :set ai 自動縮行
- :set ts=4 設置一個 TAB 鍵等於幾個空格
每次打開Vim都這么設置也是很煩人的,我們可以把這幾行寫入~/.Vimrc
,這樣打開Vi時就不用我們一個一個的設置了。 ~/.Vimrc
中可以設置
Vim 插件管理
作為一個老牌編輯器,Vim有近萬個插件。所需即所獲:像 IDE 一樣使用 Vim通過定制,你完全可以把Vim打造成IDE:
打造C/++ IDE, c.Vim是一個重要的插件,我們以c.Vim說明一下Vim插件的下載、安裝、使用、管理的問題。
~/.Vim
目錄是存放所有插件的地方。如果是第一次安裝插件要通過 mkdir ~/.Vim
創建~/.Vim
目錄。通過cd ~/.Vim
進入~/.Vim
目錄。
mkdir src
cd src
git clone https://github.com/WolfgangMehner/c-support.git
cp -r ./c-support/ ..
在配置文件中啟用插件:
Vim ~/.Vimrc
filetype plugin on
使用前我們使用vi ~/.Vim/c-support/templates/Templates
編輯一下模板,主要是Author, Authorref,Email,Organizaiont,Company等:
我們這時用vi hello.c
來編輯C代碼時,會自動插入文件說明:
我們使用輸入\im
就可以生成main函數:
幫助文檔參看~/.Vim/c-support/doc/c-hotkeys.pdf
,通過下面的截圖你能感受到c.Vim功能的強大:
上面的命令不用死記硬背,通過做中學
在實踐中慢慢的掌握。
我們也可以通過在線文檔查找幫助。
如果想安裝其它插件,Vim的官方插件在Vim Scripts,github上有個鏡像Vim Plugins On GitHub。
如上所示,Vim通過在 .Vim 目錄中預定義子目錄管理所有插件,如子目錄 doc存放插件幫助文檔、plugin 存放通用插件腳本,用戶將插件打包文檔中的對應子目錄拷貝至 .Vim/ 目錄即可完成插件的安裝。但是這樣一鍋粥的管理方式會導致一些問題:比如命名沖突,更新、卸載等管理復雜。現代的編輯器如Atom,Sublime Text的插件管理就非常好。
這個問題也有Vim插件來解決,Vim的插件管理有Pathogen,Vundle,Vim-plug
這些插件。Vundle應用比較廣,想學的話下面的參考資料中有教程,我們在這里使用小巧快速的Vim-plug
。
首先我們下載 plug.Vim 並把它放在 ~/.Vim/autoload
目錄。然后配置~/.Vimrc
,加入一個Vim plug節:
- 這個節以
call plug#begin()
開始 - 用Vim-plug的命令列出要安裝的插件
- 以
plug#end()
結束這個節
比如,我們安裝c.Vim:
" 指定插件目錄 (for NeoVim: ~/.local/share/nVim/plugged)
call plug#begin('~/.Vim/plugged')
" 注意:插件路徑放到單引號中,下面是幾個Vim-plug的命令例子
" github上的插件安裝可以使用簡化引用: 比如安裝fetches https://github.com/junegunn/Vim-easy-align
" Plug 'junegunn/Vim-easy-align'
" 也可以使用git URL 安裝
"Plug 'https://github.com/junegunn/Vim-github-dashboard.git'
" 用|分隔可以在一行安裝多個插件
" Plug 'SirVer/ultisnips' | Plug 'honza/Vim-snippets'
" 安裝c.Vim
Plug 'https://github.com/Vim-scripts/c.Vim.git'
" Initialize plugin system
call plug#end()
保存~/.Vimrc
,重新打開Vim,使用:PlugInstall
就可以安裝~/.Vimrc
中列出的插件了:
其他插件管理的命令如下:
這樣,根據自己的需求就可以定制具有個人特色的Vim了。
Vim 常用插件
c.Vim
c.Vim 是C/C++程序員使用Vim必裝的插件,我們上面已經介紹了安裝和使用的方法,常用的操作有
- \im 插入主函數
- \if 插入函數
- \cfu 插入函數頭,即函數說明
- \cfr 插入一個frame comment,可以用來寫變量說明
- \p< 插入一個include , 並且把光標放在<>中
- \rc 保存並編譯
- \rr 運行
- \nr 可以在~/.Vim/c-support/codesnippets中編寫一些預編譯代碼或者代碼塊,通過此命令使用
Emmet.Vim(HTML,CSS)
Emmet (Zen Coding的新版本) 是一個能大幅度提高前端開發效率的一個工具。
Emmet適用於編寫HTML/XML 和 CSS 代碼的前端開發人員。Emmet為大部分流行的編輯器都提供了安裝插件,Emmet-Vim是Vim的Emmet插件。
Emmet-Vim的基本用法:先寫簡寫形式,然后用"Ctrl+y+,"將其轉成HTML代碼
例入,先輸入!
或html:5
,然后按"Ctrl+y+,",就會擴展出來:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
</html>
基本規則:
- E 代表HTML標簽
- E#id 代表標簽E有id屬性
- E.class 代表E有class屬性
- E[attr=foo] 代表某個特定屬性
- E{info} 代表標簽E包含的內容是info
- E>N 代表N是E的子元素
- E+N 代表N是E的同級元素
- E^N 代表N是E的上級元素
tabular
for Vim-markdown
Vim-markdown
need tabular
WebAPI.Vim
YouCompleteMe(自動補全)
Vim使用舉一反三
Vim有多牛?幾乎所有的現代編輯器,IDE甚至瀏覽器都有Vim模式插件,下面是我使用過的一個不完全列表。當然這些插件功能和Vim會差很多,但至少都會支持常見的編輯和移動。
-
Bash: 在.bashrc 中
set -o vi
,Bash中就可以像vi一樣進行編輯和移動了 -
Vim for Firefox : 像Vim一樣使用firefox。Vimperator 是一個Firefox瀏覽器擴展,能夠使Firefox瀏覽器像Vim一樣高效工作。在安裝上 Vimperator之后,無論是 Firefox 的外觀,還是 Firefox的行為,都像極Vim。Vimperator還具有類似鍵盤綁定的功能,這使你能夠靈活地使用熱鍵來完成各種操作。
-
Vim for Chrome:像Vim一樣使用Chrome, Vimium 這個名字其實是 Vim 和 Chromium 的合體。
-
Vim for Atom:安裝Vim Mode Plus Package
-
Vim for Sublime:選擇Preferences->Settings- Default, 在文本的最下面有一行 "ignored_packages": ["vintage"], ["vintage"]->[].
-
Vim for Intellj IDEA:File>Settings>Plugins>Install JetBrains plugin...,然后搜索安裝IdeaVim插件。
-
Vim for Eclipse:Vrapper is an eclipse plugin which acts as a wrapper for existing eclipse text editors to provide a Vim-like input scheme for moving around and editing text.
-
Vim for Visual Studio:This is a Vim Emulation layer for Visual Studio 2010 and above. It integrates the familiar key binding experience of Vim directly into Visual Studio's editor.
-
...
參考資料
- Vim教程與學習資料匯總
- 簡明 Vim 練級攻略
- 七個高效的文本編輯習慣(以Vim為例)(視頻)
- 所需即所獲:像 IDE 一樣使用 Vim
- Tutorial: Make Vim as Your C/C++ IDE Using c.Vim Plugin
- Vim 實用插件推薦(2017)
- Vundle
- Vim Scripts
- Vim Plugins On GitHub
- Vim Plugins On Awesome
- Vim插件之插件管理器Vundle
- 使用Vundle管理配置Vim基本插件
- 使用 Vundle 管理 Vim 插件
- 插件資源整理
- Vim 知乎專欄
- Linux使用vim進行多文件查找和替換的方法
- 2020年vim的C/C++配置
- 如何安裝 Vim 插件
歡迎關注“rocedu”微信公眾號(手機上長按二維碼)
做中教,做中學,實踐中共同進步!
-
版權聲明:自由轉載-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
如果你覺得本文對你有幫助,請點一下左下角的“好文要頂”和“收藏該文”