使用vim的重不重要_VIM高级操作,经常用vim的应该多学习。多开发效率很有大帮助!...
Vim是號稱“編輯器之神”的文本編輯軟件,自從接觸Vim以來,基本上都是用Vim來修改和編寫代碼和配置文件的。
但是我一直只會用最基本的命令,雖然把HJKL的定位鍵已操縱地很熟練。但是Vim其他強大的地方卻幾乎沒有觸及過。
學一樣東西,就要把它學精。
這里記錄了一些常用的使用技巧。
零、將VIM打造為超級IDE
先附上鏈接
一、兩行合并為一行:
int
main(int argc,char argv)
假如要把上面兩行并為一行,只需要定位于int這行,然后按J(大寫),即可。
二、撤消和重做
以前很傻,只知道按u來撤消,不知道重做。不一小心,撤消過頭就傻了。原來重做是Ctrl+r。
另外,大寫U用來撤消整行。
三、連續插入n個感嘆號
以前以為用i/a不能進行連續多個字符的插入,原來錯了!
Hello World
比如要在上面這句話后面插入10個"!",總不能真的打10個吧?
只要在普通模式下把光標定位于d,然后按10a!……不對啊,才一個!,別急,再按兩下Esc!哈哈,出來10個!了吧!這個貌似不太常用,但挺好玩,呵呵~
四、快速保存退出
之前我會用兩個退出方法:
保存并退出:wq
不保存并退出:q!
現在保存并退出有更快的方法──直接在普通模式下按ZZ即可。
另外,用:e!可以不保存文件并重新載入這個文件。
五、移動和滾動
直接按w/b來按單詞滾動,w是向前移動一個單詞,b是向后移動一個單詞,我居然不常用!虧我還常常dwdw的來刪除詞。
另外,Ctrl+D向下滾屏,Ctrl+U向上滾屏,比我之前hjkl(左下右上)的有效率多了……汗
不知道在哪里?
:set number,來顯示行號,:set nonu取消行號,行號+gg(或者 行號+G)直接到達該行。
六、查找時忽略大小寫和歷史查找
有時查找單詞時需要忽略大小寫,只要設置下面的就可以了
:set ignorecase
還有另外一種忽略搜索時大小寫的方法更好用,只要在待搜索字符串后加個\c就可以了
/stringYouWantToSearch\c
假如進行過幾次查找,想繼續以之前查過的關鍵詞查找時,只要按/,然后上下鍵來選擇即可
同理,按下:,然后上下鍵,也可以翻看執行過的歷史紀錄,不過僅限于當前的編輯。
七、快速查找
你要找當前光標定位處的字段,難道要慢吞吞輸入/和字段嗎?不必了!直接按*號,Vim就會把當前的字段作為查找內容,找下一處。
對了,:set hlsearch可以將查找的內容設置成高亮。這樣就好看了。反之,加上:set nohlsearch就可以了。上面的ignorecase也可以加no。
八、定義標記
現在才發現定義標記這個超有用的東西!真是后悔莫及啊!
以前在一個C文件里,從一個方法跳到另一個方法,跳來跳去,都是記行數的……
原來,按下ma,就會給光標所在處標記了一個a,接下來可以通過`a來訪問這個地方!注意,符號`是數字1左邊那個符號,此外,通過'a,可以訪問那個位置的行首,注意,符號'是單引號。
打命令:marks可以看到所有的標記。
而''或``,就可以在最近的兩個標記之間相互跳轉!
當你用 "G" 命令跳到另一個地方,Vim 會記住你從什么地方跳過去的。這個位置成為一個標記,要回到原來的地方,使用如下命令:'',''命令可以在兩個位置上跳來跳去。而 CTRL-O 命令則跳到一個 "較老" 的地方 (提示: O 表示 older)。CTRL-I 則跳到一個 "較新" 的地方.
:jumps 命令能輸出一個你可以跳往的位置的列表。最后一個你使用的標記會用 ">" 符號標記出來。
Vim 允許你在文本中放置自定義的標記。命令 "ma" 用 a 標記當前的光標位置。你可以在文本中使用 26 個標記 (a 到 z)。這些標記是不可見的,只是一個由 Vim 記住的位置。
要跳到一個你定義的標記,可以使用命令`{mark},這里 {mark} 是指定義標記的那個字母。所以,移到標記 a 的命令是:`a
你可以用如下命令取得所有的標記的列表::marks
到有一些特殊的標記,包括:
'?????? 跳轉前的光標位置
''?????? 最后編輯的光標位置
[?????? 最后修改的開始位置
]?????? 最后修改的結束位置
注:mark僅在當前文件跳轉有效,jumps可在多個文件之間來回跳轉
九、替換文本(這個沒看懂怎么用................)
* 用cw或ce來將光標所處的單詞替換掉,效果是一樣的;
* 按cc的話,直接替換整行。 另外,用S也能達到同樣的效果;
* 按C=c$,替換當前至行尾的內容;
* s的話,是替換當前的字符,跟r的功能一樣;
* 以前刪除一行至末尾用d$,原來D就行了;
上面的大多數都可以加數字!
十、可視選擇(這個我沒怎么用過.....)
* 按v進行選擇,如果想控制頭和尾,按o/O進行切換;
* 如果是大寫的V,則按行進行選擇;
十一、刪除單詞和替換句子、復制單詞
* 一般來說,用dw/de刪除單詞需要將光標定位于單詞開頭(de不會刪除單詞后的空格,dw會刪除單詞后的空格),用dw/de時需移到單詞開頭是因為dw/de會從光標所在的那個字符(包括該字符)開始刪除直到該單詞結束,但是如果用daw,則無需這樣,只要光標在這個單詞上就可以了(daw會將空格一起刪除,daw=Delete a Word),如果不包括空格,就是diw;
* 替換句子的話,就用cis就行了(目前我試驗出來的可以被用以標示一句話結束的標點符號是英文的問號?和句號. )
接下來看下復制:
yy命令復制當前整行的內容到vi緩沖區
yw復制當前光標所在位置到單詞尾字符的內容到vi緩存區,相當于復制一個單詞,而yaw/yiw也是復制一個單詞,但光標可以處在該單詞的任何位置,比起yw的需要移動到單詞的首字符要方便。
y$復制光標所在位置到行尾內容到緩存區
y^復制光標所在位置到行首內容到緩存區
#yy 例如:5yy就是復制5行
#yw 例如:2yw就是復制兩個單詞
如果要復制第m行到第n行之間的內容,可以在末行模式中輸入m,ny例如:3,5y復制第三行到第五行內容到緩存區。
十二、模式轉換
Vim作為一種強大的編輯工具,是通過鍵盤來實現,而不是通過鼠標來實現的。這一點很重要。
vim有三種常見的模式,Normail Mode(命令模式),Insert Mode(輸入模式)和Visual Mode(視圖模式)。
這幾種模式的切換是也是很直接方便的,比如在命令模式下,要求輸入字符,只要輸入i就進入輸入模式
而根據要輸入位置和當前光標的關系不同,有不同的切換。
總之可以把命令模式和輸入模式的切換有Append,Insert,Replace,Subsitute 記作AIRS,這種記憶方法特別方便
英文單詞的意思是空氣,vim在命令模式和輸入模式的切換就像空氣一樣,無影無形。
而AIRS的英文字母的大小寫意思是不一樣的。小寫的表示characterwise(字符),大寫的表示linewise(行)
十三、 刪除、復制指定個數個字符
比如 : 5yl?????? 復制光標后的5個字符(包括光標所在的那個字符)
5yh?????? 復制光標前的五個字符(不包括光標所在的那個字符)
5dl??????? 刪除光標后的5個字符(包括光標所在的那個字符)
5dh?????? 刪除光標前的5個字符(不包括光標所在的那個字符)
十四、強大的替換功能
替換::%s/old_string/new_string/g。或者:3,7s/old_string/new_string/g
在一個目錄下替換文本中的某個字符串
sed -i 's/orig_string/new_string/g' *
十五、同時編輯多個文件
在vim的普通模式下輸入 :e filename,可以打開并編輯新的文件,但如果當前文件還沒有保存的話,會有錯誤提示,這時需使用:w 先將其保存才行。
如果正在用vim編輯著多個文件,可以用 ctrl+^在他們之間來回切換,比如現在同時打開了6個文件,則就有6個不同的緩沖區,比如現在在編輯文件1,想切換到文件5去,則需要先把本文件保存(通過 :e ),然后再按5,再按ctrl+^,就切換到文件5了。
:rew??? 讀入編輯名單中的第一個文件, :last 讀入編輯名單中的最后一個文件。:next 會關閉光前文件打開下個文件開始編輯,但當前文件也需要先:w保存。,但:set hidden 允許在有未保存的修改時切換緩沖區,此時的修改由 vim 負責保存.
你打開了幾個窗口,現在你想退出 Vim,你可以分別關閉每一個窗口。更快的方法是:
:qall
這表示 "quit all"(全部退出)。如果任何一個窗口沒有存盤,Vim 都不會退出。同時
光標會自動跳到那個窗口,你可以用 ":write" 命令保存該文件或者 ":quit!" 放棄修改。
如果你知道有窗口被改了,而你想全部保存,則執行如下命令:
:wall
這表示 "write all"(全部保存)。但實際上,它只會保存修改過的文件。Vim 知道保
存一個沒有修改過的文件是沒有意義的。
另外,還有 ":qall" 和 "wall" 的組合命令:
:wqall
這會保存所有修改過的文件并退出 Vim 。
最后,下面的命令由于退出 Vim 并放棄所有修改:
:qall!
注意,這個命令是不能撤消的。
或者也可以用多窗口來在一個界面中編輯多個文件,如下:
vim -o a b c 打開多個文件,每個文件一個窗口(水平分割)
vim -O a b c 打開多個文件,每個文件一個窗口(垂直分割)
或者:
打開一個 :sp 另外一個文件 (水平分割) :vsp 文件名(垂直分割)如此就可以在一個窗口打開2個或多個文件了。可以使用 ctrl + 兩次按 w在多個窗口的文件中切換
窗口大小調整:(輸入順序: ctrl+shift+w 行數 +/-/>/
ctrl+shift+w, 5, - 當前窗口縮小5 行(高度,(如不指定行數,默認為1)
ctrl+shift+w, 5, + 當前窗口增加5 行(高度,(如不指定行數,默認為1)
ctrl+shift+w, 5, > 當前窗口增加5 列(寬度,(如不指定列數,默認為1)
ctrl+shift+w, 5, < 當前窗口增加5 列(寬度,(如不指定列數,默認為1)
ctrl+shift+w, = 使所有窗口幾乎一樣大
ctrl+shift+w, _(下劃線) 使當前窗口最大化
十六、執行shell命令
在 vi 中也可以執行 shell 的命令。在命令模式下,指令:!command,command 是shell 命令。例如指令:!date 會把目前的時間和日期顯示到螢幕上。
要是你想把shell 命令的結果放到文件中,可以用:r !command。比如r !date 會把現在的時間放到光標所在的行的下一行。可以指定行數,例如:20r !date 會把現在的時間放到第二十行。
如果你要下一連串的shell 命令但又不想離開vi,你可以在line mode 下指令sh。這個指令會建立一個shell,如果要離開sh回到vim,可輸入exit,或按ctrl-D 。
也可以選擇檔案中的文字作為shell 命令的輸入。輸出的結果會把替換掉你輸入的文字。例如:2,5!sort 會把第二列到第五列的文字依序排列,而原來的文字就會被覆蓋。
十七、編輯得更快一點
按詞移動
w
按下w會前進一個詞。
b
按下b會后退一個詞。
這里,就像在Vim中的大部分情況下一樣,在這兩個命令前面加上一個數字可以讓它們重復做多次。
移動到行首或行末
$
$會讓你移動到所在行的末尾。
^
^會讓你移動到所在行的開始。Home鍵也可以做相似的事。不過^會移動到第一個非空的字符處,而Home會移動到行首。
這兩個命令也接受數字參數,比如
2$
會移動到下一行末。
在行上查找
f要查找的字符
f用來在一行上查找一個字符并移動到該字符所在處。比如
fx
用來移動到此行當標后第一個x處。如果有一個數字參數,就可以指定移動到某個指定的匹配位置。
F
F用來向左查找。
移動到指定行
行號G
G命令會把你帶到用行號指定的行。如果使用沒有行號的G,將會移動到最后一行。
顯示當前所在位置
:set number
Vim的可制定性是很強的,所以你可以通過:set設定很多選項。number就是其中之一。它是一個布爾選項,用來控制是否在最左邊顯示行號。
:set number
可以把它打開。
:set nonumber
則可以關閉此選項。
Ctrl+g
Ctrl+g會顯示當然后在的位置。
向上和向下翻屏
Ctrl+u
會向上翻半屏
Ctrl+d
會向下翻半屏
刪除文本
dw
dw會刪除一個詞。你應該可以看得出來,這里的w代表的就是word(詞).其實d后面可以加好多東西來控制刪除的對象。比如:
d$
會刪除從當前位置到行末的所有內容,同理,d^會刪除從當前位置到行首的所有內容。
數字放在哪
這里有一個疑問,如果想刪除三個詞,那么應該怎么辦?是d3w,還是3dw。其實它們都能做到,不過原理不太一樣。d3w是一次刪除三個詞,而3dw是執行三次刪除一個詞。其實這兩者可以混起來,比如2d3w。
改變文本
cc
用來刪除一行并進入輸入狀態。
cw
用來刪除一個詞并進入輸入狀態等。
替換字符
r替換的字符
r命令把當標處的字符替換成在r命令中指定的字符。
更改大小寫
~
通過~可以把光標處的字符用它的大寫(如果現在是小寫)或小寫(如果現在是大寫)替換。
宏
Vim有著簡潔而強大的宏功能。
q宏名
按下 q+宏名 后會進入宏錄制狀態,也就是說,此后發生的一切操作都會記錄到名為“宏名”的宏中。如果名為“宏名”的宏已經存在,則將它覆蓋。
@宏名
會調用名為“宏名”的宏。
十八、使用舉例
1.在不是以hello開頭的行里,如果其行末以old結尾,則將其替換為new,該命令為 :
:g!/^hello/s/old$/new/g
這里用到了全局命令:g,詳見下圖:
比如想把開頭不是#的行的開頭添加上為#,可以這樣寫 :g/^[^#]/s/^/#/
分別轉載自:
http://apps.hi.baidu.com/share/detail/30695667
參加討論!
我有3個文件要同時編輯:文件是A.C,B.C和C.BAS,vi命令如何實現,vi中如何在這3個文件中進行切換?
vim可以在多分割窗口(multi-split-screen )環境下編輯多個文件。想了解有關詳情可輸入:help usr_08.txt。
要分割屏幕顯示多個不同文件,在vi命令提示符后輸入:
:split another-file
:vsplit another-file
不知道你在安裝系統的時候是否裝screen了?我裝了,如果裝了,直接打screen,然后Ctrl a + c 為創建新窗口,Ctrl a + p為在打開的]窗口中切換!可以開很多個!足夠用!
1. Use vi to open the three file directly
for example
vi a b c
2.Then vi will open the file by the order you enter in the command line.
But current is a.
If you want to change to b, you must first save a, then press "2"
,then press "Ctl+Shift+^", for c, you must first save b, then press "3", then press "Ctrl+Shift+^".
vi a b c
:n跳至下一個文件,:e#回到剛才編輯的文件。
比如當前編輯文件為a,:n跳至b,再:n跳至c,:e#回到b,想回到a的話用:ea
我覺得用split 開窗口的好處,可以直接用yy在兩個窗口之間復制
兩個窗口可以同時是一個文件
其實可以在一個窗口下,打開3個文件的。
先 打開一個,vi 文件名
然后在vi的命令輸入狀態下輸入
:sp 另外一個文件的路徑及文件名
如此就可以在一個窗口打開3個文件了。
可以使用 ctrl + 兩次按 w
在3個文件中切換
輔道
我們可以用ex命令來實現在多個文件之間的切換,而不需要退出vi,這可以為我們節省很多時間,并且因為沒有退出vi,我們可以使用buffer來在不同文件之間實現拷貝和粘帖。
1)? 在啟動vi的時候指定多個文件,這就相當在vi啟動時我們就把多個文件加入到了vi的候選列表中,在編輯過程中我們可以用命令 :n來切換到下一個文件,我們可以用命令 :args來查看當前又有多少個文件在編輯的候選列表中;但是我們發現:n命令只能切換到下一個文件,那么怎么切換到前一個文件呢,我們可以用:rewind命令(可以簡寫為:rew)
很快我們發現上面的方式不夠靈活,例如我們不能任意指定想要編輯的文件,而且我們可能需要在編輯的任何時候加載新的文件,前面的方法滿足不了,怎么辦呢,幸運的是vi足夠強大,已經為我們想到了這些。
2)? 我們并不是在每次啟動vi的時候就知道總共要編輯多少個文件,可能在編輯的過程中我們需要實時加載需要編輯的文件,這時候怎么辦呢,我們可以用:e命令在編輯的任何時候加載并切換到新文件,例如我們啟動vi的時候編輯main.cc,在編輯過程中發現要修改一個類定義,這樣我們就可以使用命令:e singlton.h來加載類定義所在的頭文件(當然在加載新文件之前需要保存原來修改的文件main.cc)。vi提供了一個符號#來記錄前一個編輯的文件,這個符號可以很方便的在兩個文件之前切換,我們只需要輸入:e #, 哈哈,很方便吧;不過vi還有一個更方便的命令可以在兩個文件之間來回切換 -- Ctrl+^(數字鍵6),這個命令比前面的:e #更加方便哈。
3) 之前一直不知道怎么用vi從一個文件拷貝內容到另外一個文件,都是直接用鼠標右鍵來搞定的,但是這樣不是很方便,而且在終端下好像不行(黑屏幕那個終端),今天終于找到方法了,呵呵。
這里有兩個方法可以實現,一個是用vi的命令,首先把需要復制的文本復制到一個named buffer中 -- "f4yy(表示復制4行文本到名字為f的buffer中,一定前面要有一個"啊,要不然后面的f就不會被解釋為buffer的名字了),然后切換到目標文件,最后用命令"fp(將buffer f中的內容拷貝到目的文件中),哈哈,大功告成,我們需要復制的文本從源文件已經拷貝到目的文件了。還有一種方法是使用ex命令(就是命令前面帶:的,例如:e, :w), 首先也是在源文件中將需要復制的內容拷貝到一個named buffer中 -- :10,12ya a(將10到12行這三行的內容拷貝到一個名字為a的buffer中),然后切換到目標文件,最后在目標文件中將buffer a中的內容拷貝到目的地 -- :pu a(將buffer a中的內容拷貝到當前位置)。
轉載自:http://www.cnblogs.com/jackk294/archive/2009/08/09/1542274.html
昨天有人提出此類問題,我特地加以編輯一下,請大家共享,可能寫的不好!
大家在vi編輯中,常常遇到想把文件A里面的一行或多行,復制到B文件里面去
(可能很多人不知道怎么辦),該怎么做了?
下面是幾中方法:
1.如果你有多臺機器,而且是聯網的,你可以用netterm虛擬終端,telnet登陸主機對A文件進行修改、復制,然后打開B文件粘貼過去!
2.如果是單機,當然要用unix自帶的編輯功能呢
先簡單介紹一些vi編輯里的命令:
(A).yw?將當前字存入無名緩沖區,前面可加"x,表示存入名字為x的有名
緩沖區(x為a-z),也可加數字表示存入的字數,以后可用P或p命
令取出
yy?將當前行存入無名緩沖區,用法參看yw
(B).命令如下:a-Z?是緩沖區,也可移出數字1-Array指定的刪除緩沖區
利用命名緩沖區可很好地保存若干文本段,便于以后存取、移動或者重排。這些緩沖區用a到z字母命名!為了訪問這些緩沖區中的一個,要使用雙引號
例如:要把一行插入a緩沖區,可鍵入:
"ayy
為了把這個文本放回該文件中,鍵入"ap
(c).m做標志命令:
m?字母?用字母標記當前行,以后可用?’字母使光標移動到當前行,
(參看’命令)
列子:1。將a文件中的4行到b文件中
命令如下:"ay4+
:ex?b?(轉到b文件中)
然后"ap
2.?將a中多行復制到b文件中
先在開始處做標志mk
然后在末尾用"ay’k?(光標自動回到開始處,此時已經把你的內容放到緩沖區了)
其中a表示緩沖區a
然后用ex轉義到你的文件B中,然后用"ap命令粘貼就行
3。如果你文件中有多次要復制粘貼的話,看下面:
a表示緩沖區a?,你還繼續可以使用緩沖b嗎
緩沖區有a-z和1-Array這么多
緩沖區就好象windows下的煎切版一樣,它有好多個,你可以把你想要的復制進去,然后粘貼,只不過你用"ay時候多換a就是了,如你要復制462行用"ay?,復制536行用"by
另外還有 cw刪除一個單詞。并進入insert模式
shift + * 定位到函數的定義處
ctrl+o 返回調過來之前的地方。
f12進入ctags模式
總結
以上是生活随笔為你收集整理的使用vim的重不重要_VIM高级操作,经常用vim的应该多学习。多开发效率很有大帮助!...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML转义字符大全<转>
- 下一篇: css 外弧_css 伪类实现弧形