vim常用操作和使用技巧
移動光標
在 vi 中, 移動光標和編輯是兩件事, 正因爲區分開來, 所以可以很方便的進行光標定位和編輯. 因此能更快一點移動光標是很有用的.
w 移動光標到下一個單詞開頭.
e 移動光標到下一個單詞結尾
b 移動光標到上一個單詞.
0 移動光標到本行最開頭.
^ 移動光標到本行最開頭的字符處.
$ 移動光標到本行結尾處.
A 移動光標至行尾並處於“追加”狀態,直接編輯
H 移動光標到屏幕的首行.
M 移動光標到屏幕的中間一行.
L 移動光標到屏幕的尾行.
gg 移動光標到文檔首行.
G 移動光標到文檔尾行.
:n 跳至第n行
ctrl + f 向下翻頁 同 page down.
ctrl + b 向上翻頁 同 page up.
ctrl + d 向下翻半頁 此比較有用
ctrl + u 向上翻半頁 此比較有用
ctrl + e 向下翻一行
ctrl + y 向上翻一行
[[ 轉到上一個位於第一列的“{”
]] 轉到下一個位於第一列的“}”
{ 轉到上一個空行
} 轉到下一個空行
'' 兩個單引號 此命令相當有用, 它移動光標到上一個標記處, 比如用 gd, * 等查找到某個單詞後, 再輸入此命令則回到上次停留的位置.
'. 一單一點 此命令相當好使, 它移動光標到上一次的修改行.
`. 一倒引一點 此命令相當強大, 它移動光標到上一次的修改點.
查找
/xxx(?xxx) 表示在整篇文檔中搜索匹配xxx的字符串, / 表示向下查找, ? 表示向上查找.其中xxx可以是正則 表達式, 再輸入 n 查找下一個匹配處, 輸入 N 反方向查找.
*(#) 當光標停留在某個單詞上時, 輸入這條命令表示查找與該單詞匹配的下(上)一個單詞. 同樣, 再輸 入 n 查找下一個匹配處, 輸入 N 反方向查找.
g*(g#) 此命令與上條命令相似, 只不過它不完全匹配光標所在處的單詞, 而是匹配包含該單詞的所有字符 串.
gd 本命令查找與光標所在單詞相匹配的單詞, 並將光標停留在文檔的非註釋段中第一次出現這個單詞的 地方. 用於查找局部變量等
% 本命令查找與光標所在處相匹配的反括號, 包括 () [] { }
f(F)x 本命令表示在光標所在行進行查找, 查找光標右(左)方第一個x字符.找到後:
輸入 ; 表示繼續往下找
輸入 , 表示反方向查找
替換
替換是 vi 的強項,使用“:s/模式/字符串/標誌”進行替換,其中的“模式”是一個正則表達式,可以用來匹配字符串.以下提供幾個例子.
:s/aa/bb/g 將光標所在行出現的所有包含 aa 的字符串中的 aa 替換爲 bb
:s/\<aa\>/bb/g 將光標所在行出現的所有 aa 替換爲 bb, 僅替換 aa 這個單詞
:%s/aa/bb/g 將文檔中出現的所有包含 aa 的字符串中的 aa 替換爲 bb
:12,23s/aa/bb/g 將從12行到23行中出現的所有包含 aa 的字符串中的 aa 替換爲 bb
:12,23s/^/#/ 將從12行到23行的行首加入 # 字符
:%s= *$== 將所有行尾多餘的空格刪除
:%s/\s\+$// 將所有行尾多餘的空格刪除
:g/^\s*$/d 將所有不包含字符(空格也不包含)的空行刪除
:%s/\(\s*\n\)\+/\r/ 將所有不包含字符(空格也不包含)的空行刪除.
:%s!\s*//.*!! 去掉所有的“//”註釋
特殊編輯
ga 顯示光標所指字符的encoding 編碼,比如ASCII碼
guw 光標所在單詞光標後的字符小寫
gUw 光標所在單詞光標後的字符大寫
撤銷
u 撤銷
拷貝, 刪除與粘貼
在 vi 中 y 表示拷貝, d 表示刪除, p 表示粘貼. 其中拷貝與刪除是與光標移動命令結合的, 看幾個例子就能夠明白了.
yw 表示拷貝從當前光標到光標所在單詞結尾的內容.
dw 表示刪除從當前光標到光標所在單詞結尾的內容.
daw 表示刪除光標所在的單詞,不管光標在此單詞那一位置
y0 表示拷貝從當前光標到光標所在行首的內容.
d0 表示刪除從當前光標到光標所在行首的內容.
y$ 表示拷貝從當前光標到光標所在行尾的內容.
d$[D] 表示刪除從當前光標到光標所在行尾的內容.
特殊地:
yy 表示拷貝光標所在行.
dd 表示刪除光標所在行.
D 表示刪除從當前光標到光標所在行尾的內容.
xp 表示交換光標與其後的字符的位置
ddp 表示光標所在行與下一行交換
J 表示光標所在行與下一行合併
關於拷貝, 刪除和粘貼的複雜用法與寄存器有關, 可以自行查詢.
數字與命令
在 vi 中數字與命令結合往往表示重複進行此命令, 若在擴展模式的開頭出現則表示行號定位. 如:
5yy[y5y] 表示拷貝光標以下 5 行.
5dd[d5d] 表示刪除光標以下 5 行.
:12,24y 表示拷貝第12行到第24行之間的內容.
:12,y 表示拷貝第12行到光標所在行之間的內容.
:,24y 表示拷貝光標所在行到第24行之間的內容. 刪除類似.
5fx 表示查找光標後第 5 個 x 字符.
5w(e) 移動光標到下五個單詞的頭部(尾部).
TAB
TAB 就是製表符, 單獨拿出來做一節是因爲這個東西確實很有用.
<< 輸入此命令則光標所在行向左移動一個 tab.
>> 輸入此命令則光標所在行向右移動一個 tab.
5>> 輸入此命令則光標後 5 行向右移動一個 tab.
:12,24> 此命令將12行到14行的數據都向右移動一個 tab.
:12,24>> 此命令將12行到14行的數據都向右移動兩個 tab.
那麼如何定義 tab 的大小呢? 有人願意使用 8 個空格位, 有人用4個, 有的用2個.
有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 沒關係, vim 能
幫助你.以下的設置一般也都先寫入配置文件中, 免得老敲.
:set shiftwidth=4 設置自動縮進 4 個空格, 當然要設自動縮進先.
:set sts=4 即設置 softtabstop 爲 4. 輸入 tab 後就跳了 4 格.
:set tabstop=4 實際的 tab 即爲 4 個空格, 而不是缺省的 8 個.
:set expandtab 在輸入 tab 後, vim 用恰當的空格來填充這個 tab.
文件跳轉與tags
文件跳轉要使用tags文件,生成方式爲 ctags -R *, ctags爲外部命令。
使用方法:
(1)把光標移到變量名或函數上,按
ctrl+ ] 跳轉到變量或函數定義的地方,按
ctrl+ t 返回到原文件
可以多次跳轉和多次返回
(2)在vi中:ta[:tag]可以直接跳轉到變量或函數定義的地方
(3)vi -t 變量或函數名,直接打開變量或函數定義的文件
*其他選項*:
:tselect [關鍵字] 顯示與“關鍵字”匹配的標記列表,輸入數字跳轉到指定的標記
:tjump [關鍵字]
類似於“:tselect”,但當匹配項只有一個時直接跳轉至標記處而不再顯示列表
:tn 跳轉到下一個匹配的標記處
:tp 跳轉到上一個匹配的標記處
設置配置文件
在啓動的時候vim會讀取 /etc/vimrc 和 ~/.vimrc (也就是說, 全局設置的vimrc 和用戶設置)。一般情況下用戶設置自己home目錄的.vimrc就已足夠
“雙引號開始的行爲註釋行,下同
“去掉討厭的有關vi一致性模式,避免以前版本的一些bug和侷限
set nocompatible
“顯示行號
set nummber
“檢測文件的類型
filetype on
“記錄歷史的行數
"set history=1000
“背景使用黑色
set background=dark
"語法高亮度顯示
syntax on
“下面兩行在進行編寫代碼時,在格式對起上很有用;
“第一行,vim使用自動對起,也就是把當前行的對起格式應用到下一行;
“第二行,依據上面的對起格式,智能的選擇對起方式,對於類似C語言編寫上很有用
set autoindent
set smartindent
"C語言對齊方式,最好用它
set cindent
“第一行設置tab鍵爲4個空格,第二行設置當行之間交錯時使用4個空格
set tabstop=4
set shiftwidth=4
"以空格代替tab,注意make文件有時候必須用tab,而不能用空格代替
"set expandtab
“設置匹配模式,類似當輸入一個左括號時會匹配相應的那個右括號
set showmatch
“在編輯過程中,在右下角顯示光標位置的狀態行
set ruler
“默認情況下,尋找匹配是高亮度顯示的,該設置關閉高亮顯示,最好定義快捷鍵
"set nohls
"打開高亮
set hlsearch
“查詢時非常方便,如要查找book單詞,當輸入到/b時,會自動找到第一
“個b開頭的單詞,當輸入到/bo時,會自動找到第一個bo開頭的單詞,依
“次類推,進行查找時,使用此設置會快速找到答案,當你找要匹配的單詞
“時,別忘記回車
set incsearch
"設置退格鍵
set backspace=2
"set backspace =indent,eol,start
"不進行文件備份
set nobackup
"不要交換文件
set noswapfile
“去除vim的GUI版本中的toolbar
"set guioptions-=T
“當vim進行編輯時,如果命令錯誤,會發出一個響聲,該設置去掉響聲
"set vb t_vb=
"設定文件編碼類型,徹底解決中文編碼問題
let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
set fenc=utf-8 " default fileencoding
set fencs=utf-8,gb18030,gbk,gb2312,cp936,ucs-bom,euc-jp
:set list 可以用來顯示非可見字符