整理了一下Vim方面的筆記,在某些方面填補了國內空白——就是有關tab和space的說明(背景音:臉皮好厚,大家扔西紅柿)。
1,開啟水平捲軸
a,set guioptions+=b #(bottom scrollbar)
b,set nowrap
2,滾屏
a,一行[向下:ctrl+e, 向上:ctrl+y(Win32+p)]
b,半屏[向下:ctrl+d, 向上:ctrl+u]
c,整屏[向下:ctrl+f, 向上:ctrl+b]
3,移動可視屏的行(針對自動折行時有效)
a,下移可視屏的一行 gj
b,上移可視屏的一行 gk
4,進入Visual(選擇)模式
a,單個字元 [v]
b,整行 [shift+v]
c,Block [Win32:ctrl+q, Unix:ctrl+v]
5,折行
a,建立折行--[zf{motion}]
b,開啟--[zo] 開啟所有嵌套折行--[zO] 開啟所有折行--[zR]
c,折起--[zc] 折起所胡嵌套折行--[zC] 折起所有折行--[zM]
d,刪除--[zd] 刪除所有折行(在折行的最初一行才有效)--[zD]
e,顯示左邊折行標記: set foldcolumn=4
6,顯示控制字元[help listchars]
a,set listchars=tab:>-,eol:$,trail:-
b,trick&tips:using searching hightline:
b,1: [/\t] -- show tabs.
b,2: [/\s\+$] -- show trailing whitespace.
b,3: [/ \+\ze\t] -- show spaces before a tab.
7,顯示行號
a,set number
b,set nonumber
8,字元寬度控制
a,每行顯示字元數量:textwidth=72
b,縮排所佔字元數量:shiftwidth=2 | 增加當前行縮排(以空格填充):>>
c,Tab所佔字元數量 :tabstop=4
b.1, tabstop -- (顯示的角度)一個tab所佔字元長度(從底層來講二進位編碼:0x09);
b.2, softtabstop -- vim特定的一種表示,當按下tab鍵時要補全(包括已前面鍵入的空格)的空格總數(0x20)。
例如,softtabstop=4時,
>>游標前有1個空格時,你按下tab會添加3個空格,以補全4個空格;
>>而當游標前已有2個空格時你按下tab則會添加2個空格,以補全4個空格。
>>游標前已有4個空格時,不用補全。繼續進入一下輪,發現只有0個空格,所以一次被足4個空格。--相當於連key了4下空格鍵
注意(關鍵點):當按下softtabstop補全的空格數(包括已前面的已有的空格)可以產生tab時,vim自動將前面所有空格按tabstop的寬度(每tabstop寬度個0x20)轉換成tab(一個0x09)字元
b.3, expandtab --將tab轉換成空格(expand the tab as blankspaces where you are typing,the amount of expanding based on settings of softtabstop/tabstop)
b.4, retab {number} --根據number重新計算tab(tab周圍的空格也被算在內),
例如:當前tabstop=8,當你[retab 2]的時候執行兩個動作:
>>第一步,將一個tab(原本tab佔8個字元)拆為4個tab(現在tab佔2個字元)。
>>第二步,將tabstop設為2。
9,以二進位方式查看檔案
a,%!xxd -- 整個檔案(%)dump為二進位格式
b,%!xxd -r -- 將檔案反轉為原來的格式
10,自動補全
a,I_CTRL_P--Previous Match, I_CTRL_N--Next Match
b,I_CTRL_X(進入補全模式) + CTRL_O
11,特殊字元
a,I_CTRL_V + {special char} 或 I_CTRL_V + {digits} [Win32上用CTRL_Q代替CTRL_V]
b,怪異符號(合體字,Digraphs) I_CTRL_K + {digraphs} | :digraphs -- Show all of digraphs
c,查看當前游標下的字元編碼 [ga]
12,比較緩衝區與原檔案--顯示已做的改動
a,DiffOrig
13,加法,減法
a,加法: {count}CTRL+A -- 將游標下的數字加上count.(Win32下先用unmap取消CTRL+A的“全選”功能)
b,減法: {count}CTRL+X
14,大小寫變換
a,gue --當前字元 guw --當前word
b,gUe --當前字元 gUw --當前word
15,虛編輯
a, set virtualedit=all -- 可以將游標移動到一行中的任意位置(列)。
注意:若該不是一個空白行(blank line & empty line),則游標會自動回到行尾。
>>如果想避免該問題可以先用r進行替換,替換時至游標位置的所有空白將自動以空格填充。
b, 虛替換:gr或gR(進入虛替換模式) -- 可以讓被替換的字元佔據應有的空間位置,這對替換tab(0x09)時特別有用。
16,快速移動
a,f+{character} 向前尋找一個字元(停在該字元上)
b,F+{character} 向後尋找一個字元(停在該字元上)。
17,跳轉游標
a,``(兩個脫字元) 回到之前的位置。注意:w,b,fx之類的命令不能算是跳轉。
b,CTRL_O 跳回(older)
c,CTRL_I 向前跳
18,程式內的移動
a,[+{ --該block頭, [+/ --該注釋頭, [+m --該函數頭
b,]+{ --該block尾, ]+/ --該注釋尾, ]+m --該函數尾
19,格式化程式碼
a,== 當前行, gg=G 整個檔案
b,按檔案類型自動縮排: filetype indent on
20,格式化文本
a, set textwidth=78
b, gggqG --格式化整個文檔
21,刪除空行
a, :g/^$/d --刪除空行
b, :g/\s\+/d --Delete trailing whitespace.
22,Vim指令碼中的變數
a,指令碼特殊變數
$NAME 環境變數名
&name Vim中的選項名(例如ts,sw)
@name Vim中的寄存器名
b,變數作用範圍標識
name 函數局部
b:name 局部於一個緩衝區
w:name 局部於一個視窗
g:name 全域變數
v:name Vim預定義變數
99,Windows下對應的按鍵組合被佔用的解決方案
a,unmap {<C-A>} -- 取消Windows下CTRL+A(全部選擇)的功能。
# vim:set shiftwidth=2 foldmethod=indent tabstop=8: #