1 gg 檔案的首行, G 檔案的尾行
2 vim的自動補全功能
一般使用Ctrl+n就能自動補全了,從Vim7後,C/C++的函數、變數或是類的成員,使用Ctrl+x,Ctrl+o也能自動補全。
如果不全的可能項有多個,可多次按ctrl + n 選擇你想要的不全項。
3 split(水平分欄) vsplit(垂直分欄)
#split . 將目前的目錄(這裡的目前的目錄不是pwd的結果,就是當前vim中開啟的目錄)
#split 這樣是將目前的目錄(目前的目錄是pwd的結果)或是當前開啟的檔案分欄
4 ctrl + w 從一欄跳到另外一欄
5 e 後面接目錄參數,退出到該指定目錄
e + 目錄(這裡是目錄哦,不能是檔案,e + 檔案 是沒有什麼作用的) 表示退出到指定目錄
e . 退出到目前的目錄,這裡的目前的目錄.即pwd的結果。如果要退到指定目錄可用: e 指定目錄,如:e ./src/scxsystemlib ---退到scxsystemlib目錄
6 nyy 複製n行 yy複製一行 p 粘貼.y 複製高亮選中的文本到剪下板.
7 ndd 刪除n行 dd 刪除一行.db刪除某個單詞.
1.複製粘貼的基本命令:
yy複製遊標所在行整行。或大寫一個Y。
2. yy或y2y複製兩行。
y^複製至行首,或y0。不含遊標所在處字元。
y$複製至行尾。含遊標所在處字元。
yw複製一個word。
y2w複製兩個字(單詞)。
yG複製至檔尾。
y1G複製至檔首。
p小寫p代表貼至遊標後(下)。
P大寫P代表貼至遊標前(上)。
8 預設情況下SSH Secure Shell Client不支援vim文法高亮,解決辦法:
1. SSH Secure Shell Client上選擇 Enable ANSI colors選項
2. 在/etc/profile裡加上export TERM=dtterm
3. 在目前使用者HOME目錄產生.exrc檔案,在檔案中加入syntax enable命令,並儲存。
這樣目前使用者在任意目錄開啟vim命令就會有文法高亮了,哈哈。
9 0 游標到行首,$游標到行尾
10 w 下個單詞,b前面一個單詞
11 /尋找時,n下個,shift+n 向相反方向尋找同上一次的字元
12 f(ile),顯示當前檔案名稱
13 cd 指定當前路徑,預設pwd得到的是 vim . 開啟時的檔案路徑
14
在目前使用者HOME目錄產生.exrc檔案 中加入如下命令:
set tabstop=4 ----設定定位字元寬度
set softtabstop=4 ----設定軟定位字元寬度
set shiftwidth=4 ----設定縮排的空格數為4
set autoindent ----設定自動縮排:開啟新行時,新行的上一行縮排空格為多少,則新航縮排距離也為多少。使用 noautoindent 取消設定
set cindent ----設定使用 C/C++ 語言的自動縮排方式
set expandtab ----將所有的tab替換為tabstop指定數目的空格 (命令可簡寫為 set et)
15
如果設定了set cindent,開啟c/c++風格的自動縮排後,在編碼的時候可以選中一段代碼,按"="將這段代碼按照c/c++風格重新調整縮排,美化代碼。但是,開啟了自動縮排後, 在使用 TERM 下的 vim 的時, 粘貼代碼時常常會出現版式混亂的現象。那是因為 TERM 並不知道現在正在粘貼代碼, 它直接“粘貼”動作向 vim解釋為鍵入, 因此 vim 便按照設定的自動縮排格式為的代碼調整了縮排。
不幸的是, 粘貼進去的代碼中本身已經包含了縮排, 因此便出現了版式混亂的情況。
在 gvim 中就不會出現這個問題, 因為它能夠知道現在正在粘貼。
知道了這個癥狀的來由, 解決方案也就顯而易見了: 在粘貼的時候把所有自動縮排都關閉,
粘貼完畢之後再開啟。 一個個手工關閉自動縮排未免過於繁瑣, vim 為提供了一個很好用的命令,只要輸入“:set paste”, 就可以關閉所有自動縮排。 粘貼完畢後再輸入“:set nopaste"就可以重新開啟原有的自動縮排設定了。
-----實際使用方式是,不用set cindent 也可以用=號來自動排版,很奇怪?
16 set number(set nu);set nonumber(set nonu)
17 排版代碼
可以用 "v" 高亮選中一段代碼,然後再用"="號自動排版。
如果是正個檔案,可以用gg=G來排版,或是gg v G =來排版,效果一樣.
18 在可視化選擇模式進行剪下、複製和粘貼
ctrl+v 只能選中一個矩形的代碼,矩形的大小是根據矩形範圍內最後一行的寬度來決定的;
小寫v,是根據手工選中的範圍高亮,可以選中一行的部分;
大寫的V,是整行選中。
在可視化選中模式下進行剪下和複製
一旦你有了高亮選擇, 你可能想要幹點啥. 以下是對選中的高亮文本最有用的命令:
d 剪下(刪除)高亮選中的文本到剪下板. (譯註: 據本人所知, vim所有的刪除其實都是剪下)
y 複製 (或者說"拽"(yank), vim用"拽"來表示複製...)高亮選中的文本到剪下板.
c 剪下高亮選中的文本到剪下板. 和d很相似, 只是c會進入插入模式.
shift+v 可視化行
ctrl+v 可視化塊
19 匹配括弧
% 把游標放在某個花括弧{}, 中括弧[]或者圓括弧()上, 按%會把游標移動到與之對應的花括弧, 中括弧或者圓括弧上. 對於修正多層嵌套邏輯代碼塊的括弧解析問題來說, 這個功能堪稱救人於水火之中.
20 超級移動(motion)
fx
在當前行向前移動游標到下一個字元x (很明顯, x可以是任意你想要移動到的字元). 這是一個超級有用的命令. 你可以輸入;來重複前一個f命令.
tx
和上面的命令基本相同, 除了移動游標到字元x之前而不是x字元本身,唯一區別就是每次匹配到x之前的字元後再找下一個匹配時,你必須把游標移動到這個匹配字元的後面,不然老是找到當前的這個匹配字元不往下一個找(有點傻)。 (這個真的很有用)
Fx
在當前行向後移動游標到上一個字元x.
21 當前頁的移動
<C-F> 將游標向前(下)移動一頁(螢幕).
<C-B> 將游標向後(上)移動一頁.
G 移動到檔案尾
numG 將游標移動到某一行. (例如, 10G是把游標移動到第10行.)
gg 將游標移動到檔案開頭
H 將游標移動到當前頁的第一行.
M 將游標移動到當前頁的中間一行.
L 將游標移動到當前頁的最後一行. (譯註: 有了H,M,L 這3個命令, 可以把滑鼠撇了, 爽)
22 字串的移動
* 讀取游標下的字串, 然後移動到當前檔案中下一次出現該字串的位置. (比如說如果你的游標所在的位置的字串為"bob,", 按了*之後, 游標將移動檔案中下一個"bob"出現的位置.)
# 和*命令作用相同, 只不過方向與*剛好相反,是移動到該字串上一次出現的位置.
23 標籤的使用
ma 給當前游標所在位置設定一個名字為a的書籤. 書籤的名字可以是任何小寫字母. 你看不到書籤, 但它確實在.
`a 移動游標到書籤a. 注意`不是單引號, 大部分鍵盤上它在數字1的左面. (譯註: 本人使用的vim 7.1 windows版本用單引號也能完成同樣功能)
`. 移動到你之前最後一次編輯過的行. 這個又是"真有用". 如果你需要在檔案中"滾來滾去"查看一些東西, 你可以用這個命令回到你之前編輯的行儘管你沒把它設成書
24 在非可視化選擇模式進行剪下、複製和粘貼
如果你確知你想要複製或者剪下什麼, 你可以不進入可視化選擇模式就完成這些操作. 這樣速度更快.
d{motion} 把由motion"掠過"的文本剪下到剪下板. 比如dw把當前游標開始的一個詞剪下到剪下板, 而dfS把從當前行從游標是到下一個S之間的文本剪下到剪下板.
y{motion} 把motion"掠過"的文本複製到剪下板.
c{motion} 把motion"掠過"的文本剪下到剪下板並且進入插入模式.
dd 剪下當前行到剪下板.
yy 複製當前行到剪下板.
cc 剪下當前行到剪下板並且進入插入模式.
D 剪下游標當前位置到行尾的文本到剪下板.
Y 複製整行到剪下板, 和yy相似. (yes, 這個命令和命令D的操作方式沒保持一致, 你可以用y$完成類似D的操作)
C 剪下游標當前位置到行尾的文本到剪下板並進入插入模式.
x 剪下當前字元. (類似於命令模式的退格(backspace)鍵)
s 剪下當前字元並進入插入模式.
粘貼
粘貼很簡單. 把游標移動到你想要粘貼的位置輸入p. (譯註: 粘貼操作需要在命令模式下, 另外P(大寫)命令把剪下板的內容粘貼到游標當前位置之前, 對用慣其它編輯器的人來說, P命令可能更符合習慣)
25 vim 的掛起和返回
ctrl-z 退出vim返回到shell,然後在unix中敲入命令fg斷行符號又可以回到之前中斷的vim session.
fg:foreground
bg:background
26 lcd 更改當前視窗的目前的目錄,即pwd的值
如:
lcd ~/cmCode/Unix/Shared/XPlatCommon/src ---將當前視窗進入的目錄~/cmCode/Unix/Shared/XPlatCommon/src設定為此視窗的pwd目錄.
這樣一來用e .命令時就會退出到~/cmCode/Unix/Shared/XPlatCommon/src這個目錄,很有用的方法哦^_^
lcd 與 e . 結合起來使用。用分割視窗時,lcd只是修改了當前視窗的目前的目錄,別的分割視窗時沒影響的。
~/cmCode/Unix/Shared/XPlatCommon/src這個path可以通過命令file來查看。
27 滾屏命令
CTRL+U 將螢幕向前(檔案頭方向)翻滾半屏;提示:u表示 up;
CTRL+D 將螢幕向後(檔案尾方向)翻滾半屏。提示:d表示 down;
可以在這兩個命令之前加上一個數字n,則螢幕向前或向後翻滾n行。並且這個值被系統記住,以後再用CTRL+U 和CTRL+D 命令滾屏時,還滾相應的行數。
CTRL+F 將螢幕向檔案尾方向翻滾一整屏(即一頁);提示:f表示 forward;
CTRL+B 將螢幕向檔案首方向翻滾一整屏(即一頁)。提示:b表示 backward;
同樣也可以在這兩個命令之前加上一個數字n,則螢幕向前或向後移動n頁;
CTRL+E 將螢幕向上滾動一行;
CTRL+Y 將螢幕向下滾動一行。
28 移動到行首或行尾
“$”命令把游標移動到當前行行尾。如果你的鍵盤上有<End>鍵,也可以完成相同的功能。
“^”命令把游標移動到當前行的第一個非Null 字元,
“0”命令則移到一行的第一個位置, <Home>鍵也可以完成相同的功能。
“$”命令接受個數首碼。1$表示:移動到當前行的行尾;2$表示:移動到下一行的行尾;如此類推。
"0”和“^”不接受個數首碼。
29 移動到特定的行
“G” 命令把游標移動到文末;
“gg”命令把游標移動到文首;
“nG”命令把游標移動到第n行的第一個空白字元上,可用“:set number<Enter>”來顯示行號,用“:set nonumber<Enter>”來關閉顯示;
“n%" 命令以百分數來移動游標;
“H” 命令把游標移動到螢幕的第一行;
“M” 命令把游標移動到螢幕的中間行;
“L” 命令把游標移動到螢幕的最後一行;
提示:“H”表示“Home”,“M”表示“Middle”而“L”表示“Last”。
30 在代碼間移動
“[]” 向上跳轉到一個函數的結尾,“][”向下移動到一個函數的結尾;
“[[” 向上跳轉到函數的開始,“]]”向下跳到結尾處;
注意:這四個命令要求“{”“}”符號在第一列;
“[{” 跳轉到當前代碼塊{}的開始處,“[}”跳轉到當前代碼塊{}的結尾處;
“]{”“]}”“[(”“[)”“](”“])”“[/”“]/”也有類似功能,只是匹配的是“()”“/*”
“[I” 命令尋找游標下的標識符,不僅在當前檔案內尋找,還會在所有的包含檔案中尋找;
“[<Tab>” 跳到第一項,<Tab> 可以是<CTRL+I>;
“n[<Tab>” 跳到第n項;
“]I” 只列出游標下面的項目
“[D” 只尋找 "#define" 定義的宏,
“]D” 只列出游標下面的項目
“gD” 只在當前檔案中尋找,並跳轉到被首次使用的地方;
“gd” 只在當前函數內尋找,注意,函數的開始符號“{”要求在第一列;
31 輸入 d$ 從當前游標刪除到行末。**
32 第二講第三節∶關於命令和對象
刪除命令 d 的格式如下∶
[number] d object 或者 d [number] object
其意如下∶
number - 代表執行命令的次數(可選項,預設設定為 1 )。
d - 代表刪除。
object - 代表命令所要操作的對象(下面有相關介紹)。
一個簡短的對象列表∶
w - 從當前游標當前位置直到單字/單詞末尾,包括空格。
e - 從當前游標當前位置直到單字/單詞末尾,但是 *不* 包括空格。
$ - 從當前游標當前位置直到當前行末。
特別提示∶
對於勇於探索者,請在正常模式下面僅按代表相應對象的鍵而不使用命令,則
將看到游標的移動正如上面的對象列表所代表的一樣。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二講第四節∶對象命令的特殊情況
** 輸入 dd 可以刪除整一個當前行。 **
鑒於整行刪除的高頻度,VIM 的設計者決定要簡化整行刪除,僅需要在同一行上
擊打兩次 d 就可以刪除掉游標所在的整行了。
1. 請將游標移動到本節中下面的短句段落中的第二行。
2. 輸入 dd 刪除該行。
3. 然後移動到第四行。
4. 接著輸入 2dd (還記得前面講過的 number-command-object 嗎?) 刪除兩行。
1) Roses are red,
2) Mud is fun,
3) Violets are blue,
4) I have a car,
5) Clocks tell time,
6) Sugar is sweet
7) And so are you.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二講第五節∶撤消類命令
** 輸入 u 來撤消最後執行的命令,輸入 U 來修正整行。**
1. 請將游標移動到本節中下面標記有 ---> 的那一行,並將其置於第一個錯誤
處。
2. 輸入 x 刪除第一個不想保留的字母。
3. 然後輸入 u 撤消最後執行的(一次)命令。
4. 這次要使用 x 修正本行的所有錯誤。
5. 現在輸入一個大寫的 U ,恢複到該行的原始狀態。
6. 接著多次輸入 u 以撤消 U 以及更前的命令。
7. 然後多次輸入 CTRL-R (先按下 CTRL 鍵不放開,接著輸入 R 鍵) ,這樣就
可以執行恢複命令,也就是撤消掉撤消命令。
---> Fiix the errors oon thhis line and reeplace them witth undo.
這些都是非常有用的命令。下面是第二講的小結了。
.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在 VIM 內執行外部命令的方法
** 輸入 :! 然後緊隨著輸入一個外部命令可以執行該外部命令。**
1. 按下我們所熟悉的 : 命令設定游標到螢幕底部。這樣就可以讓您輸入命令了。
2. 接著輸入驚嘆號 ! 這個字元,這樣就允許您執行外部的 shell 命令了。
3. 我們以 ls 命令為例。輸入 !ls <斷行符號> 。該命令就會列舉出您目前的目錄的
內容,就如同您在命令列提示符下輸入 ls 命令的結果一樣。如果 !ls 沒起
作用,您可以試試 :!dir 看看。
1 合并行
shift + J ----將當前行的下一行append到當前行的尾部
2 一列的刪除和插入
刪除列 1.游標定位到要操作的地方. 2.CTRL v 進入“可視 塊”模式,選取這一列操作多少行. 3.d 刪除.
插入列 插入操作的話知識稍有區別.例如我們在每一行前都插入"() ": 1.游標定位到要操作的地方. 2.CTRL v 進入“可視 塊”模式,選取這一列操作多少行. 3.SHIFT i(I) 輸入要插入的內容. 4.ESC 按兩次,會在每行的選定的地區出現插入的內容. 這樣以後就方便多了.
Vim 程式碼摺疊功能使用大全
寫C,(C++)CPP代碼時,自動摺疊能帶來很多好處,強大的Vim提供了捷徑。如下:
1. 摺疊方式
可用選項 'foldmethod' 來設定摺疊方式:set fdm=*****。
有 6 種方法來選定摺疊:
manual 手工定義摺疊
indent 更多的縮排表示更進階別的摺疊
expr 用運算式來定義摺疊
syntax 用文法高亮來定義摺疊
diff 對沒有更改的文本進行摺疊
marker 對文中的標誌摺疊
注意,每一種摺疊方式不相容,如不能即用expr又用marker方式,我主要輪流使用indent和marker方式進行摺疊。
使用時,用:set fdm=marker 命令來設定成marker摺疊方式(fdm是foldmethod的縮寫)。
要使每次開啟vim時摺疊都生效,則在.vimrc檔案中添加設定,如添加:set fdm=syntax,就像添加其它的初始化設定一樣。
2. 摺疊命令
選取了摺疊方式後,我們就可以對某些代碼實施我們需要的摺疊了,由於我使用indent和marker稍微多一些,故以它們的使用為例:
如果使用了indent方式,vim會自動的對大括弧的中間部分進行摺疊,我們可以直接使用這些現成的摺疊成果。
在可摺疊處(大括弧中間):
zc 摺疊
zC 對所在範圍內所有嵌套的摺疊點進行摺疊
zo 展開摺疊
zO 對所在範圍內所有嵌套的摺疊點展開
[z 到當前開啟的摺疊的開始處。
]z 到當前開啟的摺疊的末尾處。
zj 向下移動。到達下一個摺疊的開始處。關閉的摺疊也被計入。
zk 向上移動到前一摺疊的結束處。關閉的摺疊也被計入。
當使用marker方式時,需要用標計來標識代碼的摺疊,系統預設是{{{和}}},最好不要改動之:)
我們可以使用下面的命令來建立和刪除摺疊:
zf 建立摺疊,比如在marker方式下:
zf56G,建立從當前行起到56行的程式碼摺疊功能;
10zf或10zf+或zf10↓,建立從當前行起到後10行的程式碼摺疊功能。
10zf-或zf10↑,建立從當前行起到之前10行的程式碼摺疊功能。
在括弧處zf%,建立從當前行起到對應的匹配的括弧上去((),{},[],<>等)。
zd 刪除 (delete) 在游標下的摺疊。僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。
zD 迴圈刪除 (Delete) 游標下的摺疊,即嵌套刪除摺疊。
僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。
zE 除去 (Eliminate) 視窗裡“所有”的摺疊。
僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。
VIM中常用的替換模式總結:
1,簡單替換運算式
:%s/four/4/g
“%”範圍首碼表示在所有行中執行替換。最後的 “g” 標記表示替換行中的所有匹配點。如果僅僅對當前行進行操作,那麼只要去掉%即可
用 “\<” 來指定匹配單詞開頭:
:%s/\<four/4/g
顯然,這樣在處理 “fourty”的時候還是會出錯。用 “\>” 來解決這個問題:
:%s/\<four\>/4/g
如果你在編碼,你可能只想替換注釋中的“four”,而保留代碼中的。由於這很難指定,可以在替換命令中加一個“c” 標記,這樣,Vim會在每次替換前提示你:
:%s/\<four\>/4/gc
2,刪除多餘的空格
要刪除這些每行後面多餘的空格,可以執行如下命令:
:%s/\s\+$//
“\s\+$”表示行末($)前的一個或者多個(\+)空格(\s)。替換命令的“to” 部分是空的:”//”。這樣就會刪除那些匹配的空白字元。