開始學習vim,,發(fā)現一個不錯的入門貼:(講得是gVim)
http://blog.sina.com.cn/s/blog_46dac66f010005kw.html
:%s/r//g
刪除DOS方式的回車^M
:%s=
*$==
刪除行尾空白
:%s/^(.*)n1/1$/
刪除重復行
:%s/^.{
-}
pdf/new.pdf/
只是刪除第一個pdf
:%s/<
!--_.{
-}
-->
//
又是刪除多行注釋(咦?為什么要說「又」呢,?)
:g/s*^$/d
刪除所有空行
:這個好用有沒有人用過還有其他的方法嗎,?
:g!/^dd/d
刪除不含字符串'dd'的行
:v/^dd/d
同上
(譯釋:v
==&
nbspg!,就是不匹配?。?nbsp;
:g/str1/,/str2/d
刪除所有第一個含str1到第一個含str2之間的行
:v/./.,/./-1join
壓縮空行
:g/^$/,/./-j
壓縮空行
Vi 刪除操作:
ndw 或 ndW 刪除光標處開始及其后的 n-1 個字符,。
d0 刪至行首。
d$ 刪至行尾,。
ndd 刪除當前行及其后 n-1 行,。
x 或 X 刪除一個字符。
Ctrl+u 刪除輸入方式下所輸入的文本,。
^R 恢復u的操作
J 把下一行合并到當前行尾
V 選擇一行
^V 按下^V后即可進行矩形的選擇了
aw 選擇單詞
iw 內部單詞(無空格)
as 選擇句子
is 選擇句子(無空格)
ap 選擇段落
ip 選擇段落(無空格)
D 刪除到行尾
x,y 刪除與復制包含高亮區(qū)
dl 刪除當前字符(與x命令功能相同)
d0 刪除到某一行的開始位置
d^ 刪除到某一行的第一個字符位置(不包括空格或TAB字符)
dw 刪除到某個單詞的結尾位置
d3w 刪除到第三個單詞的結尾位置
db 刪除到某個單詞的開始位置
dW 刪除到某個以空格作為分隔符的單詞的結尾位置
dB 刪除到某個以空格作為分隔符的單詞的開始位置
d7B 刪除到前面7個以空格作為分隔符的單詞的開始位置
d) 刪除到某個語句的結尾位置
d4) 刪除到第四個語句的結尾位置
d( 刪除到某個語句的開始位置
d) 刪除到某個段落的結尾位置
d{
刪除到某個段落的開始位置
d7{
刪除到當前段落起始位置之前的第7個段落位置
dd 刪除當前行
d/text 刪除從文本中出現“text”中所指定字樣的位置,,
一直向前直到下一個該字樣所出現的位置(但不包括該字樣)之間的內容
dfc 刪除從文本中出現字符“c”的位置,一直向前直到下一個該字符所出現的位置(包括該字符)之間的內容
dtc 刪除當前行直到下一個字符“c”所出現位置之間的內容
D 刪除到某一行的結尾
d$ 刪除到某一行的結尾
5dd 刪除從當前行所開始的5行內容
dL 刪除直到屏幕上最后一行的內容
dH 刪除直到屏幕上第一行的內容
dG 刪除直到工作緩存區(qū)結尾的內容
d1G 刪除直到工作緩存區(qū)開始的內容
復制 ctrol+insert
粘貼 shift+insert
復制單行yy命令,; 粘貼用p
"
ayy 將光標當前行復制進寄存器a,,
"
ap 將寄存器a中的內容粘貼到光標位置:如果寄存器中是用yy復制的完整行,則粘貼在光標所在行下面,,"
aP則粘貼在上面,;否則粘貼在光標之后,大寫P粘貼的光標之前
可先用v,,ctrl+v,,V選擇一塊,,然后用y復制,再用p粘貼
也可以"
ay[motion]: "
ay$(復制光標位置到行末保存在a寄存器),"
ayft(復制光標位置到當前行第一個t字母出并保存在a寄存器),然后用"
ap粘貼
以上指令可去掉"
a工作,,則yp對未命名寄存器"
工作(所有d,,c,,s,,x,y的對象都被保存在這里)
進入輸入模式
a (append) 由游標之后加入資料,。
A 由該行之末加入資料,。
i (insert) 由游標之前加入資料。
I 由該行之首加入資料。
o (open) 新增一行於該行之下供輸入資料之用,。
O 新增一行於該行之上供輸入資料之用。
刪除與修改
x 刪除游標所在該字元,。
X 刪除游標所在之前一字元,。
r 用接於此指令之后的字元取代(replace)游標所在字元。如:ra將游標所在字元以 a 取代之,。
R 進入取代狀態(tài),,直到《ESC》為止。
s 刪除游標所在之字元,,并進入輸入模式直到《ESC》,。
S 刪除游標所在之該行資料,并進入輸入模式直到《ESC》,。
這是我總結的一些基本用法,可能對初用者會有幫助,獨樂樂不如眾樂樂,是吧!
說明:以下黑色為vi和vim均有的一般功能,,而紅色為Vim(Vi Improved)所特有功能。Vim一般的Unix和Linux下均有安裝,。
三種狀態(tài)
Command: 任何輸入都會作為編輯命令,,而不會出現在屏幕上,任何輸入都引起立即反映
Insert: 任何輸入的數據都置于編輯寄存器,,按ESC,可跳回command方式
Escape: 以“:”或者“/”為前導的指令,,出現在屏幕的最下一行,,任何輸入都被當成特別指令,。
離開vi
:q! 離開vi,,并放棄剛在緩沖區(qū)內編輯的內容。
:wq 將緩沖區(qū)內的資料寫入磁盤中,,并離開vi。
:x 同wq,。
(注意-- :X 是文件加密,一定要與:x存盤退出相區(qū)別)
進入輸入模式
a (append) 由游標之后加入資料,。
A 由該行之末加入資料,。
i (insert) 由游標之前加入資料。
I 由該行之首加入資料,。
o (open) 新增一行於該行之下供輸入資料之用,。
O 新增一行於該行之上供輸入資料之用。
刪除與修改
x 刪除游標所在該字元。
X 刪除游標所在之前一字元,。
r 用接於此指令之后的字元取代(replace)游標所在字元,。如:ra將游標所在字元以 a 取代之。
R 進入取代狀態(tài),,直到《ESC》為止,。
s 刪除游標所在之字元,并進入輸入模式直到《ESC》,。
S 刪除游標所在之該行資料,,并進入輸入模式直到《ESC》。
光標的移動
m<
a-z>
設置書簽<
a-z>
‘<
a-z>
移至書簽<
a-z>
處
0 移至該行之首
$ 移至該行之末,。
e 移動到下個字的最後一個字母
w 移動到下個字的第一個字母,。
b 移動到上個字的第一個字母。
^ 移至該行的第一個字元處,。
H 移至視窗的第一行,。
M 移至視窗的中間那行。
L 移至視窗的最后一行,。
G 移至該文件的最后一行,。
+ 移至下一列的第一個字元處。
- 移至上一列的第一個字元處,。
:n 移至該文件的第 n 列,。
n+ 移至游標所在位置之后的第 n 列。
n- 移至游標所在位置之前的第 n 列,。
<
Ctrl>
<
g>
顯示該行之行號,、文件名稱、文件中最末行之行號,、游標所在行號占總行號之百分比,。
(Vim) 光標移動基本用法小解:
(這只要組合上邊的功能就可以明白了,不用再一一講解了吧,!)
ge b w e
← ← ---→ --→
This is-a line, with special/separated/words (and some more).
←- ←-- -----------------→ ---→
GE B W E
視窗的移動
<
Ctrl>
<
f>
視窗往下卷一頁,。
<
Ctrl>
<
b>
視窗往上卷一頁。
<
Ctrl>
<
d>
視窗往下卷半頁,。
<
Ctrl>
<
u>
視窗往上卷半頁,。
<
Ctrl>
<
e>
視窗往下卷一行。
<
Ctrl>
<
y>
視窗往上卷一行,。
剪切,、復制、刪除
Operator + Scope = command
Operator
d 剪切
y 復制,。
p 粘帖,,與 d 和 y 配和使用,。可將最后d或y的資料放置於游標所在位置之行列下,。
c 修改,,類似delete與insert的組和。刪除一個字組,、句子等之資料,,并插入新建資料。
Scope
e 由游標所在位置至該字串的最后一個字元,。
w 由游標所在位置至下一個字串的第一個字元,。
b 由游標所在位置至前一個字串的第一個字元,。
$ 由游標所在位置至該行的最后一個字元,。
0 由游標所在位置至該行的第一個字元。
整行動作
dd 刪除整行,。
D 以行為單位,,刪除游標后之所有字元。
cc 修改整行的內容,。
yy 使游標所在該行復制到記憶體緩沖區(qū),。
取消前一動作(Undo)
u 恢復最后一個指令之前的結果。
U 恢復游標該行之所有改變,。
(vim) u 可以多次撤消指令,,一次撤消一個操作,直至本次操作開始為止,。
(vim) Ctrl+r 可以恢復撤消前內容,,按多次可恢復多次。
查找與替換
/字串 往游標之后尋找該字串,。
字串 往游標之前尋找該字串,。
n 往下繼續(xù)尋找下一個相同的字串。
N 往上繼續(xù)尋找下一個相同的字串,。
% 查找“(”,,“)”,“{
”,,“}
”的配對符,。
s 搜尋某行列范圍。
g 搜尋整個編輯緩沖區(qū)的資料,。
:1,$s/old/new/g 將文件中所有的『old』改成『new』,。
:10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。
(vim)
/字符串 后邊輸入查詢內容可保存至緩沖區(qū)中,,可用↑↓進行以往內容選擇,。
另外:將光標移動在選定單詞下方按*,,則可以選中此單詞作為查詢字符,可以避免輸入一長串字符的麻煩,。
(vim) 大小寫替換
首先用按v開啟選擇功能,,然后用↑↓←→鍵來選定所要替換的字符,若是小寫變大寫,,則按U;
反之按u;
如果是選擇單詞,,則可以在按v后,按w,,最后按U/u,這樣就可以將字符隨意的改變大小寫了,,而不用刪除后重新敲入。
資料的連接
J 句子的連接,。將游標所在之下一行連接至游標該行的后面,。
環(huán)境的設定
:set all 可設置的環(huán)境變量列表
:set 環(huán)境變量的當前值
:set nu 設定資料的行號。
:set nonu 取消行號設定,。
:set ai 自動內縮,。
:set noai 取消自動內縮。
(vim)
:set ruler 會在屏幕右下角顯示當前光標所處位置,,并隨光移動而改變,,占用屏幕空間較小,使用也比較方便,,推薦使用,。
:set hlsearch 在使用查找功能時,會高亮顯示所有匹配的內容,。
:set nohlsearch 關閉此功能,。
:set incsearch 使Vim在輸入字符串的過程中,光標就可定位顯示匹配點,。
:set nowrapscan 關閉查找自動回環(huán)功能,,即查找到文件結尾處,結束查找,;默認狀態(tài)是自動回環(huán)
ex指令
讀寫資料
:10,20w test 將第10行至第20行的資料寫入test文件,。
:10,20w>
>
test 將第10行至第20行的資料加在test文件之后。
:r test 將test文件的資料讀入編輯緩沖區(qū)的最后,。
:e [filename] 編輯新的文件,。
:e! [filename] 放棄當前修改的文件,編輯新的文件,。
:sh 進入shell環(huán)境,,使用exit退出,回到編輯器中,。
:!cmd 運行命令cmd后,,返回到編輯器中,。
刪除、復制及搬移
:10,20d 刪除第10行至第20行的資料,。
:10d 刪除第10行的資料,。
:%d 刪除整個編輯緩沖區(qū)。
:10,20co30 將第10行至第20行的資料復制至第30行之后,。
:10,20mo30 將第10行至第20行的資料搬移至第30行之后,。
偶是比較懶,在windows下我直接就共享了剪貼板.
set clipboard+=unnamed
vim: 如何使粘貼到vim的代碼排列整齊?
粘貼到vim的代碼,,尤其是從WEB粘貼過來的代碼,,經常是一片混亂,看起來向右不斷縮進造成的,。
解決的辦法是:
1 粘貼完畢使用命令:
gg=G
上面這個命令的意義是(摘自http://vimdoc./cgi-bin/vimfaq2html3.pl):
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
2 一般的vim都默認設置為set nopaste,。在粘貼前設置:
set paste使得vim進入粘貼模式,則粘貼過來的內容能夠保持原來的格式,。
推薦使用方法2,。
VIM是Linux下功能非常強大的一款字符處理軟件,,功能如何,,在這里就不再做過多的評述了。很多朋友在使用VIM的時候,,可能都會遇到一個非常簡單,,但是又很奇怪的問題,就是關于VIM的剪切板,。
我們先做這樣一個小小的嘗試,,請打開瀏覽器,從網頁上隨便復制一段文字,,然后打開VIM,,用“p”粘貼一下,你會發(fā)現,,什么都沒有站貼過來,,呵呵……原
因是這樣的,不同于Windows,,VIM具有多個剪貼板,,并且和系統(tǒng)剪貼板是完全獨立的,所以當你復制瀏覽器里的文字的時候,,這段文字保存在了系統(tǒng)剪貼
板,,當你是用“p”來粘貼的時候,實際上,,他讀取的是VIM的剪切板,。
那怎么方便的將系統(tǒng)剪貼板的內容復制過來呢,?簡單!用另外一個快捷方式“Shift+Insert”就可以了,,如果你在使用Gvim的話,,直接用鼠標中鍵也可起到相同的作用。是不是很簡單,?
好了,!現在您已經學習到了VIM剪貼板技巧的基礎!OK,!我們開始進階,!
我們前面說過,VIM具有多個剪切板,,目的是為了用戶在做較復雜的字符處理的時候,,可以更方便的復制粘貼。請現在使用一下“:reg”命令(先按ESC
鍵,,退出編輯模式,,然后按:進入命令模式,然后輸入reg回車),,看到了,?屏幕上的輸出結果!是不是特別眼熟,,對了,!就是您之前復制過的所有內容!也許這
時候您還發(fā)現,,VIM的剪切板原來有這么多個,,按照數字還有符號一個一個的區(qū)分開的,這里舉一個編號的例子--"
5,,看到了嗎,?是以"
開頭的。還有,!有沒 有看到編號為"
+的剪切板,?里面的內容是不是剛才你在瀏覽器里復制的那段文字啊,?呵呵……沒錯了,!系統(tǒng)剪切板的編號就是"
+。
好了,,
這時候您已經知道了如何查看之前的所有剪貼板內容,,我們現在就試著把某一個特定剪切板的內容復制進我們正在編輯的文件中。我們知道,,vi的粘貼指令是
“p”,,但是如果要粘貼一個特定的剪貼板,,只是用p就不行了,那怎么辦,?簡單,!把剪貼板的編號帶上不就可以了?現在先按ESC,,退出編輯模式,,然后一詞按
"
+p這三個字符(怎么按?不會吧,!"
和+怎么按,?用Shift啊?。?,好了!你看看,,之前在瀏覽器中復制的這段文本,,是不是被粘貼進文檔中了?
如何將系統(tǒng)剪切板里的內容復制進VIM當中,,您已經清楚了,。那如何將ViM中復制的字符粘貼到其他地方呢?很簡單,,我們只需要把要復制的文字,,復制進"
+剪切板不就可以了,?("
+剪切板是系統(tǒng)剪切板,,忘記了?)在VIM中,,復制的指令是y(在非編輯模式下按y就可以了),,那要將文本復制進指定的剪切板,
和粘貼指定剪切板內容的方法一樣,,只需要加上剪切板的編號就可以了,。舉個例子,我們希望把VIM中的一段文本復制下來,,然后粘貼到瀏覽器的地址欄中:第一
步,,現把需要復制的文字選中(非編輯模式下),然后在鍵盤上依次按"
+y這三個字符,,OK,!已經復制下來了,現在用:reg命令看看,,是不是在"
+剪切板 中了,?
呵呵……好了,,目前為止,您已經大致掌握了VIM剪切板的基本用法,,當然,,VIM剪切板的功能還很強大,本文也不能盡數道來,,就請您繼續(xù)發(fā)掘吧……
定制 Vim
http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim3/