久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

[vim與gvim技巧]vim&gvim技巧大全(5)

 望穿墻 2015-06-25

轉自:http://blog./uid-8494387-id-2030950.html

Here's something very curious:

:%s/foo/bar/gc
is of course a substitution effective for the entire file
with confirm on each occurrence of "foo"
with the option of quitting at any point.

However, using something similar,

:g/foo/s//bar/gc
using the global g to effect the entire file --
does NOT allow quitting at any point
(even with the use of ).

If there are hundreds of "foo" -- it's an important fine point...

Invite further comments...
Arun Easi, April 23, 2002 23:33
g/foo/s//bar/gc => run the command s//bar/gc for each of the line
matching foo. It is like running multiple "s//" commands (Hence
you have to press q for each of the invocation). The
g in "s///gc" does not imply entire file, it just implies all occurence
on a line (or else, it would have substituted only the first)
[email protected], May 30, 2002 9:04
Here is one that deletes every other line (adjusting double spaced files):

:g/.*/norm jdd

pagaltzis()gmx_de, August 6, 2002 15:12
This can be done much simpler:

:%norm jdd
[email protected], February 10, 2003 4:49
Another cool g feature is to count the number of lines matching /regexp/

let x=0 | g/regexp/let x=x+1
echo x

Great, if you are editing data files.

Regards
Mike
[email protected], March 27, 2003 2:14
Reverse all the lines in a file:

:g/^/m0

I have found that useful . . . honest!

PK

[email protected], September 3, 2003 5:06
Can I do something like this using ":g" (or anything else)

I have a file which contains following kind of lines

abc123=1,2,3
bcd123=100,200,300
abcb123=1,3,4

I want to convert this to following

abc123=1,abc,2,abc,3,abc
bcd123=100,bcd,200,bcd,300,bcd
abcb123=1,abcb,3,abcb,4,abcb

Basically I want to replace each comma in a line with first few letters, which are coming before 123, of that line surrounded by 2 commas.
Anonymous, September 3, 2003 12:45
To answer  kkgahlot's question:

global // execute "s/\\([=,][^,]*\\)/\\1, " . matchstr (getline ("."), "^.\\{-}\\(123\\)\\@=") . "/g"

To make the whole thing a little more transparent some explanations (from the inside out):

We want to execute on each line a command like

s/\([=,][^,]*\)/\1, abc/g

for each line, but abc gets changed on each line.

The function

matchstr (getline ("."), "^.\\{-}\\(123\\)\\@=")

returns the string that matches the pattern /^.\{-}\(123)\@=/ on the current line. In the given examples this is the text preceding 123= at the beginning of the line. Depending on the actual requierements, a simpler expression like /^[a-z]*/ could work too.

The command

execute "s/\\([=,][^,]*\\)/\\1, " . matchstr (getline ("."), "^.\\{-}\\(123\\)\\@=") . "/g"

assembles the desired substitute command for the current line by joining some static text with the return value of the matchstr function and then executes it.

As execute works only on the current line, the command

global // execute ...

applies it to all line. If only certain lines should be proecessed replace // with some other pattern.

[email protected], November 21, 2003 10:39
Reverting lines in a file can also be done via
:%!tac

instead of tac, you can also use sort, xxd, xxd -r, cut, your-own-filter
Anonymous, March 29, 2004 7:18
too bad :g does not have a /c parameter for confirmed execution of ex commands. Something like the /c used in :s///c for replacing only confirmed pattern locations.

or does it ??
[email protected], April 14, 2004 10:06
I just want to add that the :g command in vi/ed is the basis for the name for the Unix grep command, i.e. Global Regular Expression Print.  The "Print" part described the default behaviour of :g when no command was given.  Obviously this behaviour was more useful when using ed.
[email protected], August 16, 2004 23:55
Thank you for the tip
發(fā)信人: smartiger (天才虎), 信區(qū): Linux
標  題: 解釋一下vi的一個高級用法
發(fā)信站: BBS 水木清華站 (Tue Jan 14 12:14:54 2003), 轉信

:v/./$s/$/./|'';/./-1j|$d
         Replaces multiple blank lines with just one blank line.

請問如何解釋,特別是|和;

--

                  RedHat   8.0         Slackware  8.0
                  Mandrake 9.0         Debian     2.2r6
                  Xteam    4.0         RedFlag    3.0

                            SmarTiger

※ 來源:·BBS 水木清華站 smth.edu.cn·[FROM: 210.138.200.6]
發(fā)信人: sk8er (TRUE SK8ER), 信區(qū): Linux
標  題: Re: 解釋一下vi的一個高級用法
發(fā)信站: BBS 水木清華站 (Tue Jan 14 16:32:33 2003), 轉信

我試了一下,,這個好像不像你所說的那樣工作,。
:v/./$ 把整個文檔都選中了,然后用 s 替換……怎么搞的……看不懂。

還不如用

:%s/\(\n\s*\)\{2,}/\r\r/g

來刪除多余的空行,。

【 在 smartiger (天才虎) 的大作中提到: 】
:          Replaces multiple blank lines with just one blank line.
: 請問如何解釋,,特別是|和;

--
People will buy anything that's one to a customer.

※ 修改:·sk8er 于 Jan 14 16:33:55 修改本文·[FROM:  166.111.140.66]
※ 來源:·BBS 水木清華站 smth.edu.cn·[FROM: 166.111.140.66]
發(fā)信人: yeshao (葉少·HP加滿了!), 信區(qū): Linux
標  題: Re: 解釋一下vi的一個高級用法
發(fā)信站: BBS 水木清華站 (Tue Jan 14 16:34:07 2003), 轉信

 :g/^[[:blank:]]*$/d
【 在 sk8er (TRUE SK8ER) 的大作中提到: 】
: 我試了一下,,這個好像不像你所說的那樣工作,。
: 還不如用
: 來刪除多余的空行。

--

痛苦和驕傲,,這一生都要擁有

※ 來源:·BBS 水木清華站 smth.edu.cn·[FROM: 202.112.55.84]
發(fā)信人: sk8er (TRUE SK8ER), 信區(qū): Linux
標  題: Re: 解釋一下vi的一個高級用法
發(fā)信站: BBS 水木清華站 (Tue Jan 14 16:36:10 2003), 轉信

你把空行全刪掉了
他還想為多個留一個空行

【 在 yeshao (葉少·HP加滿了,!) 的大作中提到: 】
:  :g/^[[:blank:]]*$/d

--
New York now leads the world's great cities in the number of people around
whom you shouldn't make a sudden move.
                -- David Letterman

※ 來源:·BBS 水木清華站 smth.edu.cn·[FROM: 166.111.140.66]
發(fā)信人: scaner (沉默), 信區(qū): Linux
標  題: Re: 解釋一下vi的一個高級用法
發(fā)信站: BBS 水木清華站 (Thu Jan 23 16:29:02 2003), 轉信

:v/./$s/$/./|'';/./-1j|$d

|是兩個命令風格符號

:v/./$s/$/enter./
'';/./-1j
$d

記得大概是這樣.
我也看不動.
自己看help把.
大概意思是吧
所有的空行,變成
.
變成

........ --> n line -> ndot
然后
d掉最后一行
v那個是區(qū)域選擇命令

具體的我也不清楚了.

【 在 smartiger (天才虎) 的大作中提到: 】
:          Replaces multiple blank lines with just one blank line.
: 請問如何解釋,特別是|和;

--
沉默是痛苦的女兒

※ 來源:·BBS 水木清華站 smth.edu.cn·[FROM: 166.111.168.15]
發(fā)信人: allanj (木瓜), 信區(qū): Linux
標  題: Re: 解釋一下vi的一個高級用法
發(fā)信站: BBS 水木清華站 (Thu Jan 23 18:26:01 2003), 轉信

好像在那里見過

你在最后一行加個 .  然后執(zhí)行下面的命令
    :v/./ ; /./-1j
那個 . 就是為了防止原來最后一行為空,
    不能再匹配 /./ 了

大意:
        /./ 是非空行
        v 是 g! 的簡寫, 而 g! 就是取 g 的反

    所以 v/./ 就是標記出所有空行

    然后對標記出的每一行  操作
        ; 連接 2 個行號
        /./-1 就是從標記那個行號開始找非空行,
                  然后 (行號 - 1)
        j 就是 連接 2 行
    所以 () ; () j 就是把連續(xù)的幾個空行 join
    (如果標記的行不存在, g 方式就繼續(xù)下一個存在的,
     所以連接也不會出問題)

原來的:
    v/./$s/$/^M./|'';/./-1j|$d
在 vim 下沒試成, 設了 compatible 也沒效果.
他是不是也想在最后加個 . 然后連接, 再去掉?

大致這樣分
v/./
    $s/$/^M./   |
    '';/./-1j   |
    $d

v/./        對所有的空行執(zhí)行后面 3 個命令
    $s/$/^M./   對第 $ 行, 執(zhí)行后面的替換
    '';/./-1j   從 '' 行開始, 到第一個非空行, 執(zhí)行 j 命令
    $d          刪除第 $ 行

【 在 smartiger (天才虎) 的大作中提到: 】
:          Replaces multiple blank lines with just one blank line.
: 請問如何解釋,,特別是|和;
--
※ 修改:·allanj 于 Jan 23 18:26:56 修改本文·[FROM:  166.111.215.54]
※ 修改:·allanj 于 Jan 23 18:27:26 修改本文·[FROM:  166.111.215.54]
※ 來源:·BBS 水木清華站 smth.edu.cn·[FROM: 166.111.215.54]
發(fā)信人: sk8 (destroying Tsinghua), 信區(qū): Linux
標  題: Re: 解釋一下vi的一個高級用法
發(fā)信站: BBS 水木清華站 (Thu Jan 23 19:50:40 2003), 轉信

不就是合并空行嗎,?何必搞得這么復雜

這不是解決這個問題的好辦法


:%s/\(\n\s*\)\{2,}/\r\r/g
不就行了

【 在 allanj (木瓜) 的大作中提到: 】
: 好像在那里見過
: 你在最后一行加個 .  然后執(zhí)行下面的命令
:     :v/./ ; /./-1j
: 那個 . 就是為了防止原來最后一行為空,
:     不能再匹配 /./ 了
: 大意:
:         /./ 是非空行
:         v 是 g! 的簡寫, 而 g! 就是取 g 的反
:     所以 v/./ 就是標記出所有空行
:     然后對標記出的每一行  操作
:         ; 連接 2 個行號
: ...................
--
※ 修改:·sk8 于 Jan 23 19:56:07 修改本文·[FROM:  218.88.205.178]
※ 來源:·BBS 水木清華站 smth.edu.cn·[FROM: 218.88.205.178]
vim使用技巧(1)
本文參考了vim官方網(wǎng)站的文檔http://www./tips/index.php。為了查找方便起見,,文中的技巧編號沿用原文檔中的編號,。

1. 使用 * 鍵可以向后搜索光標所在位置的單詞。反之,,使用 # 鍵可以向前搜索光標所在位置的單詞,。第一次使用 * 或者 # 進行搜索之后,則可以使用 N 或 Shift-N 繼續(xù)進行搜索,。另外,,如果設置了hlsearch選項(:set hlsearch)的話,那么使用 * Shift-N 則可以標記當前的單詞為高亮顯示,。

2. 經(jīng)常會遇到這樣的情況,,就是在命令行上輸入含有一個長長的路徑的命令 vi /home/username/linux/src/dir1/dir2/dir3/srcfile.c,編輯結束之后發(fā)現(xiàn)需要編輯同一目錄下的另一個文件,,這時不得不在vi中重新輸入長長的路徑,。而將下面的腳本放在vimrc文件(Unix下為~/.vimrc,Windows下為_vimrc)中即可快速輸入路徑:

"   Edit another file in the same directory as the current file
"   uses expression to extract path from current file's path
"  (thanks Douglas Potts)
if has("unix")
    map ,e :e [C-R]=expand("%:p:h") . "/" [CR]
else
    map ,e :e [C-R]=expand("%:p:h") . "\" [CR]
endif

這樣編輯完第一個文件之后,,在vi中輸入 ,e ,,然后就可以利用Tab鍵進行自動補齊了。注意上面代碼中的[]符號,,實際輸入的時候需要換成小于號和大于號(由于blog自身原因,,小于號和大于號不能直接輸入)

4. 單詞自動補齊:輸入一個單詞(例如函數(shù)、變量名等)的開頭幾個字母,,然后按Ctrl-N或者Ctrl+P鍵,,vim會在當前文檔中查找匹配的單詞并自動將輸入補齊。

6. 使用 % 鍵可以查找匹配的括號,。

7. 使用 [{ 和 ]} 命令可以跳轉到光標所在程序塊的開頭和結尾,。

8. 如果當前光標處的單詞是一個局部變量,,則使用 gd 來跳轉到該變量的定義處;如果當前光標處的單詞是全局變量,,則使用 gD 來跳轉到該變量的定義處,。

9. [i 命令可以快速察看光標所在位置的變量的定義,[d 命令可以快速察看光標所在位置的宏的定義,。

10. 流行的文本編輯器通常都有前進和后退功能,,可以在文件中曾經(jīng)瀏覽過的位置之間來回移動。在 vim 中使用 Ctrl-O 執(zhí)行后退,,使用 Ctrl-I 執(zhí)行前進,。
相關幫助:  :help CTRL-O  :help CTRL-I   :help jump-motions

12. 如果想在源程序中不使用TAB鍵并保證縮進為四字符,那么在 vimrc 中加入下列設置:

        set tabstop=4
        set shiftwidth=4
        set expandtab

13. 使用 set incsearch 之后可以在鍵入搜索關鍵字時即時顯示匹配的位置,。

14. 使用 set hlsearch 可以將匹配進行高亮顯示,。進行一次搜索之后,執(zhí)行 :nohlsearch 或 :noh 可以暫時關閉本次搜索結果的高亮顯示,。而使用 :set nohlsearch 則可以永久關閉搜索高亮顯示,。
可以將:noh命令映射到一個鍵上,例如:nmap :silent noh,,這樣就可以使用Ctrl-N來關閉高亮顯示,。

posted on 2004年10月05日 5:19 PM
1. 已經(jīng)在編輯狀態(tài)(insert mode)了,如何快速執(zhí)行 normal mode 的命令,?
在編輯文本時,,需要快速定位到某個位置,如下一個 d 的位置,,難道要
,、fd、i 這般繁瑣嗎,?
其實,,使用 Ctrl-O 就可以臨時切換到 normal mode, 執(zhí)行一個命令后自動返回 insert mode。
于是上述命令序列可以改為:
Ctrl-O,、fd 即可。
Ctrl-O 要按兩個鍵呢,,很麻煩,,于是來個 keymap
" make ` functions in insert mode
inoremap `
nnoremap ` i`

在 normal mode 下按 ` (左上角那個),會正常插入 `,,
而在 insert mode 下則相當于按 Ctrl-O,,
于是上述命令序列又可簡化為
`fd 即可。
在 insert mode 想粘貼剪貼板內(nèi)容時,,可以輸入 `P,,爽吧,?
這樣就可以在 insert mode 下天馬行空,不用再按 和a 切來切去了,。

2. vim 的剪貼板怎么怪怪的,?
用 y 命令拷貝的文本怎么不能在 X/Windows 的其它應用中使用呢?
事實上,,vim 有多個所謂寄存器來寄存剪切的內(nèi)容,。
平時是不是只用 y 和 p 命令呢?
其實這時使用的是 unamed 寄存器(對應寄存器*,,不知對否,?),即沒有給定名稱的,,
而給定名稱的,,可以加前綴 "r 使用。
例如,,將當前行放到寄存器a中,,輸入: "aY
將另一行(先移到其它行)放到寄存器b中,輸入: "bY
粘貼寄存器a,,輸入:"aP
粘貼寄存器b,,輸入:"bP

好了,扯遠了,,X/Windows 的剪貼板的內(nèi)容是存在寄存器+中,,不信,自己試試:"+P
能不能將簡單的 y 和 p命令與系統(tǒng)剪貼板聯(lián)系起來呢,?
就這句,,浪費了我許多口水:)
set clipboard+=unnamed " set clipboard

3. 我不要每次都輸入 this_object.set_...
呵,在 C 的結構或 C++ 的對象設置時,,那個結構名或對象名總是重復 n 次要輸入,,挺煩的:(
添加這兩句到配置文件中吧:
" Ctrl-F to yank line upstairs
inoremap :exe "norm! kly0jPD"

這是在編輯模式中使用的,怎么個用法,?舉個例子吧(括號內(nèi)是我的注釋):

(在編輯模式下,,先輸入這句:)
     this_object.set_height(1.80);
(                    ^)
(                    |)
(用啊,空格啊移到箭頭所示處,,即h處,,然后按Ctrl-F)
(自動補全成:)
     this_object.set_
(于是你可以繼續(xù)輸入"weight(100);" 了)

不知大家明白沒有,不明白的先試試:)

4. 我想注釋一堆 C++ 代碼
當然,,這有許多種我不知道的方法,我的通用方法為,,先在配置文件里添加:
vnoremap . :normal .

呵,,一句就夠了,,示例如下:

假設你有如下幾行代碼需要注釋:
this_object.set_height(1.60);
this_object.set_weight(100);
this_object.run();

你先移到第一行,輸入 I// (就是ESC鍵),,將第一行注釋,。
然后移到第二行,按 V 進行 line visual mode,,按 j 或其它方向移動鍵選好要注釋的所有代碼行,,
最后按: .
是不是很神奇?

呵,,說白了,,這只是在 visual mode 里使用 redo 的功能而已,有點跑題了,。
當然,,殊途是同歸的,只是路的長遠而已,。
這是條通用的路,,可以用在很多地方。
回到主題,,誰有更直接的辦法注釋一堆 C++ 代碼,?一堆 C 代碼呢(用/* */ 風格) ?

5. vi 的自動完成有什么新奇的東東,?
不就是根據(jù) buffer 的內(nèi)容來自動完成嗎,?
有些插件是可以動態(tài)地讀取頭文件或模塊來提供自動完成的,例如 python 的 pydict,。(此列表待補全:)
我想介紹的是 vi 基于字典的自動完成:
1. 增加基于字典的自動完成
set complete+=k "add dictionary complete
2. 設定字典文件,字典文件其實是個文件文件,,每個單詞占一行
(以下字典文件可能并不存在)
set dictionary=/usr/share/dict/words "set dictionary
3. 呵,因此我是不用什么英文字典來自動完成的,,很少寫英文文章,,使用字典后反應很慢。
我用基于字典完成的原因是,,使用編輯語言的關鍵字自動完成,,見:
" complete from filetype syntax file
autocmd Syntax * execute "setlocal dictionary=".$VIMRUNTIME."/syntax/".getbufvar("%","current_syntax").".vim"
對應的語言語法文件必須存在才可使用,于是寫新的 C 文件時,,可以直接 inc-N, cont-N

(請大家不吝賜教,,to be continued)
編輯者: zslevin (10/16/04 10:53)

vi編輯技巧

    游標的移動
    本節(jié)所述皆是在 common-mode(c-mode,在 vim 又名 normal-mode)下的移動,,原始的 vi 只能在 c-mode 移動,在 insert-mode 只做文字的輸入,,而不做游標的移動,。當然 vim 及 elvis 的方向鍵是不論在那一種 mode 皆可移動自如,。

基本的游標移動

    h 左,或 Backspace 或方向鍵
    j 下,,或 Enter 或 +(要 Shift 鍵),,或方向鍵

k 上,或 方向鍵或 -(不必 Shift 鍵)
    l 右,,或 Space 或方向鍵
    Ctrl-f 即 PageDown 翻頁,。
    Crtl-b 即 PageUp 翻頁。

使用 hjkl 鍵的移動是為了使手不必離開打字區(qū)(鍵盤中央的部位),,
    以加快打字的速度,,如果各位不習慣,那就使用方向鍵吧,!

Backspace 及 Space 的移動方式是到了行首或行尾時會折行,,
    但方向鍵或 hl 鍵的移動則在行首或行尾時您繼續(xù)按也不會折行。
    轉折換行的功能是 vim 的擴充功能,,elvis 無此功能,。

jk 及使用方向鍵的上下移動游標會盡量保持在同一欄位。
    使用 Enter,,+,,- 的上下移動,游標會移至上(下)一行的
    第一個非空白字元處,。

好像有點復雜,,各位就暫時使用方向鍵來移動就簡單明白了!
    等您愛上了 vim 后再來講究吧,。

進階的游標移動

    0 是數(shù)目字 0 而不是英文字母 o,。或是 Hmoe 鍵,,移至行首,,(含空白字元)。
    ^ 移至第一個非空白字元,,注意,,要 Shift 鍵。
    $ 移至行尾,,或 End 鍵,。要 Shift 鍵。

以上兩個按鍵是源自規(guī)則表示式(regular expression),,
    在 regexp 中 ^ 是匹配行首,,$ 是匹配行尾。

G 移至檔尾(最后一行的第一個非空白字元處)
    gg □至檔首(第一行之第一個非空白字元處)

gg 是 vim 的擴充功能,,在 elvis 或原始 vi 中可用 1G 來
    移至檔首(是數(shù)字 1 不是英文字 l),。

G 之原意是 goto,,指移至指定數(shù)目之行首,如不指定數(shù)目,,
    則預設是最后一行,。

w 移至次一個字(word)字首。當然是指英文單字,。
    W 同上,,但會忽略一些標點符號。
    e 移至前一個字字尾,。
    E 同上,,但會忽略一些標點符號。
    b 移至前一個字字首,。
    B 同上,,但會忽略一些標點符號。
    H 移至螢幕頂?shù)谝粋€非空白字元,。
    M 移至螢幕中間第一個非空白字元,。
    L 移至螢幕底第一個非空白字元。

這和 PageDown,,PageUp 不一樣,,內(nèi)文內(nèi)容并未動,
    只是游標在動而已,。

n| 移至第 n 個字元(欄)處,。注意,要用 Shift 鍵,。n 是從頭起算的,。
    :n 移至第 n 行行首?;?nG,。
    特殊的移動

    ) 移至下一個句子(sentence)首。
    ( 移至上一個句子(sentence)首,。
    } 移至下一個段落(paragraph)首,。
    { 移至上一個段落(paragraph)首。

sentence 是以 . ! ? 為區(qū)格,。paragraph 是以空白行為區(qū)格,。

% 這是匹配 {},[],,() 用的,,例如您的游標現(xiàn)在在 { 上只要按 %,就會跑到相匹配的 } 上。寫程式時滿好用的,。
    另還有一些 vim 的特殊按鍵,,但這得留待最后才來講述,,否則各位恐怕會頭昏眼花了,。

    基本編輯指令
    這個單元就開始進入主題了。下編輯指令都是在 commond-mode (c-mode),,就是您一進入 vim 時的模式,,只能下指令,不能鍵入文字,。如果印象模糊,,請瞄一下第一個單元的內(nèi)容。這個單元說的是基本的指令,,有些比較特殊的編輯指令,,因為太有個性了,所以會獨立成一個單元來說明,。

進入 i-mode 的指令

    i 在游標所在字元前開始輸入文字(insert),。
    a 在游標所在字元后開始輸入文字(append)。
    o 在游標所在行下開一新行來輸入文字(open),。
    I 在行首開始輸入文字,。
     此之行首指第一個非空白字元處,要從真正的第一個字元處開始輸人文字,,
    可使用 0i 或 gI(vim),。

A 在行尾開始輸入文字。
     這個好用,,您不必管游標在此行的什么地方,,
    只要按 A 就會在行尾等著您輸入文字。

O 在游標所在行上開一新行來輸入文字,。
    J 將下一行整行接至本行(Joint),。
     并無相對的 split 功能,可在 i-mode 下按 Enter 來達成

,,當然如果您熟 macro 的話,,可自行定義。
     使用 J 時,,預設會消去本行的 EOL,,且上下行接縫間會留下一個空白字元,
    這符合英文習慣,,卻對中文會造成困擾,,欲不留空白字元,
    可使用 gJ(大寫 J)指令,但這是 vim 的擴充功能,,elvis 不適用,。

請您隨便找一個檔案來試看看,光看文字說明太抽象了,。

刪除指令

    x 刪除游標所在處之字元,。在 vim 及 elvis 亦可用 Del 鍵。
    X 刪除游標前之字元,。不可使用 Spaceback 鍵,。
     vim 可以正確使用以上兩個指令于中文,會刪去一個中文字 elvis 則不行,,
    一個中文字要刪兩次,,即使用 xx。

 dd 刪除一整行(delete line),。
    dw 刪除一個字(delete word),。不能適用于中文。
    dG 刪至檔尾,。
    d1G 刪至檔首,。或 dgg(只能用于 vim),。
    D 刪至行尾,,或 d$(含游標所在處字元)。
    d0 刪至行首,,或 d^(不含游標所在處字元),。
     請回憶一下 $ 及 ^ 所代表的意義,您就可以理解 d$ 及 d^ 的動作,,
    這就是 vi(m) 可愛之處,。

取代及還原

    r 取代游標所在處之字元。vi(m) 很有個性的,,您在 c-mode 按了 r 她就會停在那里等主人鍵入所要替代的字元,,希望您這個當主人的,不要傻呼呼的也楞在那里,,趕快鍵入您的新字元吧,!:-)
     vim 中可用于中文字,也就是可以替換一個中文字,,elvis 則不行,。
    當然您的 vim 是要設在 taiwan 的才行。怎么樣,!有沒有看過如此
    有個性的取代方式,?ㄚ,!r 就是 replace 啦!

R 取代字元至按 Esc 為止,。
    cc 取代整行內(nèi)容,。或大寫 S 亦可,。
    cw 替換一個英文字(word),,中文不適用。(change)
    ~ 游標所在處之大小寫互換,。當然不能用于中文,。別忘了 Shift!
    C 取代至行尾,,即游標所在處以后的字都會被替換?;?c$,。
    c0 取代至行首,或 c^,。
    s 替換一個字元為您所輸入的字串,。和 R 不同,R 是覆蓋式的取代,,s 則是插入式的取代,,您可親自實驗看看。ㄟ,!是小寫的 s,。
    u 這個太重要了,就是 undo,,傳統(tǒng)的 vi 僅支援一次 undo,,vim 及 elvis 就不只了,vim 是沒有限制的,。
    U 在游標沒離開本行之前,,回復所有編輯動作。
    Crtl+r 這個也是很重要,,就是 redo 鍵,。
    加上數(shù)目字
    喔!騷到 vi(m) 的癢處了,,這是 vi(m) 一個非常騷包的功能,,只此一家別無分號(當然同源的 ed,sed 等不在此限),。就是您可以在大部份的指令前加上數(shù)目字,,代表要處理幾次的意思。以下用實例來說明比較清楚。

5dd 刪除游標所在處(含)起算以下五行內(nèi)容,。妙吧,!
    3r 按了 3r 后,您鍵入一個英文字,,則三個字元皆會被您所鍵入的英文取代,。很抱歉,這不能用于中文,。
    5J 將五行合并成一行,。
    3x 刪除三個字元。抱歉,,不能用于中文,。
    5i A 然后按 Ecs,插入五個 A,。中文也可以,!
    2i system Esc 插入 systemsystem。中文也可以,!
    5G 游標移至第五行,,是從檔首開始起算。
    5l 移至右第五個字元處,,當然 j 是可以用方向鍵取代的,。所有移動指令(參考第二單元)都可以加上數(shù)目字來控制,中文也通喔,!elvis 當然是不能用于中文,。
    其它的指令和數(shù)目字結合,就留待各位去發(fā)掘吧,!最重要的是請您親自操作看看,,使用 vi(m) 常常要動動腦筋,會有更妙的操作方式,。
    簡單重排功能

    >> 整行向右移一個 shiftwidth(預設是 8 個字元,,可重設)。
    << 整行向左移一個 shiftwidth(預設是 8 個字元,,可重設),。
     :set shiftwidth? 可得知目前的設定值。:set shiftwidth=4
    可馬上重設為 4 個字元,。shiftwidth 可簡寫成 sw,。ㄟ,別忘了 Shift 鍵,!

:ce(nter) 本行文字置中,。注意是冒號命令,!
    :ri(ght) 本行文字靠右。
    :le(ft) 本行文字靠左,。
     所謂置中,、靠左右,是參考 textwidth(tw) 的設定,。
    如果 tw 沒有設定,,預設是 80,就是以 80 個字元為總寬度為標準來置放,。
    當然您也可以如 sw 一樣馬上重設,。

gqip 整段重排。中文會出槌,!:-(
    gqq 本行重排,。
     重排的依據(jù)也是 textwidth。這里的重排是指您鍵入文字時沒有按 Enter 鍵,,
    就一直在 keyin,,這樣會形成一個很長的一行(雖然螢幕上會替您做假性折行),
    重排后,,則會在每一行最后加入 EOL。gq 重排功能是 vim 才有的功能,。

    復制(yank)
    yank 是什么意思,?有疑問的請查一下字典吧!就好像是中醫(yī)治療中的「拔罐」的意思啦(是不是叫「拔罐」,?知道的朋友指正一下吧),!反正在 vi(m) 中,她就是復制 copy 的意思,。這在 vi(m) 的思考邏輯里,,就是「拔」yank 起來,「放」put 上去,。其實復制的指令就是 y 一個而已,,為什么要獨立成一個單元來說明呢?因為 vi(m) 復制,、貼上的功能實在太獨特了,,再配合前面介紹的數(shù)目字,及 vi(m) 內(nèi)部的緩沖區(qū)來使用的話,,您會發(fā)現(xiàn),,原來 vi(m) 肚子里還暗藏著秘密武器。

指令說明

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多