VIM常見用法總結
歡迎和大家交流技術相關問題:
郵箱: [email protected]
博客園地址: http://www.cnblogs.com/jiangxinnju
GitHub地址: https://github.com/jiangxincode
知乎地址: https://www.zhihu.com/people/jiangxinnju
vim中光標如何回到上一次位置
ctrl + o
vim如何刪除某行至某行之間的內容?
刪除3104至5403行之間的內容:
:3104,5403d
vim使光標始終在屏幕中央
- zz是卷頁面使光標到中間
- M是移動光標到中間
- :set scrolloff=10 可以讓光標一直在中間,調整數的大小可以控制區域
vim的列編輯操作
- 刪除列:光標定位到要操作的地方。CTRL+v 進入“可視 塊”模式,選取這一列操作多少行。d 刪除。
- 插入列:例如我們在每一行前都插入"() ":光標定位到要操作的地方。CTRL+v 進入“可視塊”模式,選取這一列操作多少行。SHIFT+i(I) 輸入要插入的內容。ESC 按兩次,會在每行的選定的區域出現插入的內容。
利用vim查詢函數用法
當光標處在函數名稱時:按K即可進入函數說明(相當於man),也可以使用nK制定man的級別
vim跨文件復制
打開一個文件,在該文件下復制幾行到另一個文件(如到test.txt),會覆蓋目標中的內容
10,100w!test.txt
在該文件下復制幾行到另一個文件,但不會覆蓋原內容,即追加
10,100w!>>test.txt
在一個文件中復制幾行到緩沖區
"anyy
在另一個文件中粘貼
"ap
解決往vim裏粘貼格式散亂的問題
有時候從編輯器裏面復制粘貼代碼到vim中,代碼格式會完全亂套。其原因是vim開啟了smartindent(智能縮減)或autoindent(自動對齊)模式。為了保持代碼的格式,在粘貼前可以先停止上面的兩種模式,命令為:
:set nosmartindent
:set noautoindent
為了一個粘貼搞出這麽多事來,確實是麻煩。不過還有一個更加簡單的方法,用命令開始粘貼模式,即:
:set paste
由於粘貼模式和上面的smartindent、autoindent模式是互斥的,而smartindent是不可少的,所以粘貼完後使用下面的兩條命令之一來關閉粘貼模式。
:set nopaste
:set paste!
另外還可以通過綁定自定義快捷鍵的方式來快速切換,例如將下面配置加入到.vimrc中
方式1:
set pastetoggle=<F4>
方式2:
:map <F8> :set paste
:map <F9> :set nopaste
註意:方式1在閱讀和編輯模式下都可以使用,對粘貼模式開啟和關閉進行切換;方式2是在閱讀模式下使用,按下相應的快捷鍵就相當於執行後面定義的命令。
解決在insert模式下面backspace鍵無法刪除的問題
vim 在插入模式下
:set backspace=indent,eol,start
或者:
set nocompatible
vim 替換
:0,$s/^/#/gc " 在行首加一個#號
:6,10s/^/#/gc " 在6~10行的行首加一個#號
:%s/^ *//g " 刪除行首的空格
:%s/ *$//g " 刪除行尾的空格
:%s/^\n//g " 刪除空行
:g/^s*$/d " 刪除空行
Vim局部排序
如果我們想以第4列數據進行排序,可以在vim中如此做:
1,12!sort -r -n -k4.1,5
-r 降序排序
-n 按數字大小排序
-k,表示根據那個字段排序,4.1,表示第4列第一個字符開始 ,5表示到第5個字段為結束
-t 後面跟分隔符,缺省是空格
在VIM裏面, 如果你要把從當前行以下20行按字母順序排序
.,+20!sort
同時打開、顯示多個文件
vim還沒有啟動的時候:在終端裏輸入
vim file1 file2 ... filen
vim已經啟動,輸入
:open file
同時顯示多個文件:
:split
:vsplit
文件間切換,對於用(v)split在多個窗格中打開的文件,這種方法只會在當前窗格中切換不同的文件。
Ctrl+6—下一個文件
:bn—下一個文件
:bp—上一個文件
在窗格間切換的方法
Ctrl+w+方向鍵——切換到前/下/上/後一個窗格
Ctrl+w+h/j/k/l ——同上
Ctrl+ww——依次向後切換到下一個窗格中
用vim修改文件編碼為utf-8
網頁常常會出現亂碼的情況,一般都是編碼設置不對造成的。例如一個網頁源文件的編碼不是utf8的,但聲明為utf8<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
網頁就會出現亂碼。可以用vim修改源文件編碼為utf8,命令是
:set fileencoding=utf-8
如果用vim打開文件時裏面有亂碼,可能用上面的命令修改文件後無法保存。可以用其他軟件打開文件,然後把內容拷貝到vim裏再保存就行了。
gvim編碼配置
Vim/Gvim 在中文 Windows 下的字符編碼有兩個問題:
- 默認沒有編碼檢測功能
- 如果一個文件本身采用的字符集比 GBK 大(如 UTF-8、UTF-16、GB18030),那麽其中無法在 GBK 中對應的字符都會出現亂碼,保存時會丟失。即使編輯文件時正確檢測出文件格式也無濟於事。
第一個問題的解決辦法是在 ~/.vimrc 中加入以下配置:
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
第二個問題的解決辦法是強制要求 Vim 的內部編碼采用某種 UTF 編碼。比如 UTF-8:
set encoding=utf-8
但是,把 Vim 的內部編碼設為 UTF-8 會帶來以下新問題
- 使用非 GUI 界面的 vim 時會亂碼
- 提示信息(比如E492: 不是編輯器的命令: foo)會亂碼
要解決非 GUI 界面的 vim 的亂碼問題,需要設置終端編碼為系統默認編碼:
set termencoding=cp936
而要讓提示信息不亂碼則要需要使用 UTF-8 版本的提示信息:
language messages zh_CN.UTF-8
綜上所述,在中文 Windows 下正確配置字符編碼,需要把以下內容加入你的 ~/.vimrc 中
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set encoding=utf-8
set termencoding=cp936
language messages zh_CN.UTF-8
What is the
:help leader
ctags的安裝
ctags工具是用來遍歷源代碼文件生成tags文件,這些tags文件能被編輯器或其它工具用來快速查找定位源代碼中的符號(tag/symbol),如變量名,函數名等。比如,tags文件就是Taglist和OmniCppComplete工作的基礎。
sudo apt-get install ctags
在程序的根目錄下運行ctags -R,生成tags文件,然後在編輯程序時按Ctrl+]就會跳轉到當前光標所在東西的定義處。若有多個tag,執行:ts,進行選擇。按Ctrl+o即可跳回。不過,當修改過代碼後,需要重新生成tags。
VIM重新載入文件
有時候要使用VIM打開了一些文件,但是在其他地方把次文件改動了,例如使用git進行checkout等操作,需要重新載入此文件。
1 重新載入當前文件:
:e
:e! #放棄當前修改,強制重新載入
2 重新載入所有打開的文件:
:bufdo e 或者 :bufdo :e!
:bufdo命令表示把後面的命令應用到所有buffer中的文件。
大小寫轉換
vim中大小寫轉化的命令是:gu或者gU,形象一點的解釋就是小u意味著轉為小寫,大U意味著轉為大寫。接下來說明對這兩個命令的限定(限定操作的行,字母,單詞)等等。
整篇文章大小寫轉換
打開文件後,無須進入命令行模式。鍵入
:ggguG/:gggUG
解釋一下:ggguG分作三段gg gu(U) G
- gg=光標到文件第一個字符
- gu(U)=把選定範圍全部小(大)寫
G=到文件結束
- guw 、gue、gUw、gUe 只轉化某個單詞,光標後面的單詞便會進行大小寫轉換
- gu5w、gu5e、gU5w、gU5e 轉換5個單詞
- 1gU 從光標所在行往下一行都進行小寫到大寫的轉換
- 10gU 則進行11行小寫到大寫的轉換
- gU0 從光標所在位置到行首,都變為大寫
- gU$ 從光標所在位置到行尾,都變為大寫
- gUG 從光標所在位置到文章最後一個字符,都變為大寫
gU1G 從光標所在位置到文章第一個字符,都變為大寫
vim腳本
map
re: reduce 被映射的序列被遞歸映射
i: insert
n: normal
no: no
vim7.4的python相關配置
這裏只討論官方提供的windows版本的安裝文件對python的支持配置,至於自己編譯vim的情況,一般都很清楚python如何配置了,不在此討論。官方提供的gvim安裝文件默認是支持python和python3兩種模式的,編譯時帶有該選項,但並沒有附帶對應的運行庫和運行環境.所以在本地沒有安裝python時直接在vim中執行
:py echo "ABCDE"
會提示無法加載python27.dll, 針對於這種情況,請到官方下載 windows 版本的 32位 的python 2.7.x 安裝文件. 使用64位的python無法正常在gvim中使用。python3.x系列在某些vim相關插件中仍不支持,所以依舊推薦使用2.7.x
用vim格式化代碼
在vim的官方FAQ (http://vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl)找到的:
格式化全文: gg=G
自動縮進當前行: ==
這個是原文節選:
14.6. How do I format/indent an entire file?
You can format/indent an entire file using the gg=G command, where
gg - Goto the beginning of the file
= - apply indentation
G - till end of file
For more information, read
:help gg
:help =
:help G
:help ‘formatprg‘
:help C-indenting
VIM 編輯二進制文件 (vim手冊載錄)
幫助文檔:23.4
vim 將文件所有行合並到一行
在 Normal Mode下執行:
ggvGJ
gg 用於跳到行首
v 轉換成 visual 模式
G 跳到最後一行
J 合並行
VIM 如何查看動態增長的log文件
:set autoread
VIM常見用法總結