vim 常用

一直用dd, dw, d$, d0,卻很少在VI中剪切或者拷貝任意區域,但是這個是很常見的需求,google並試驗了一下,這裏總結一下。

 

使用VI剪切或者拷貝某個區域,其實跟我們在GUI編輯器上的操作差不多的,不外乎是如下步驟:

  1.  mark the region you want to cut/copy
  2.  cut/copy it
  3.  move to where you want to paste
  4.  paste it

 

這幾個步驟在VI中分別對應VI的幾個命令。下面簡單介紹步驟一。

1.  mark the region you want to cut/copy

主要有兩種方式

法一: 使用vi的“書籤”命令:

 

During a vi session, you can mark your place in the file with an invisible “bookmark,” perform edits elsewhere, and then return to your marked place.

在命令模式下,在你想要標識的地方敲入命令mx,表示Marks the current position with x (x can be any letter). (The original vi allows only lowercase letters. Vim distinguishes between uppercase and lowercase letters.)。這樣相當於在這個地方作了個書籤(錨點),之後你就可以快速的跳回來了。
'x: (Apostrophe.) Moves the cursor to the first character of the line marked by x.
`x: (Backquote.) Moves the cursor to the character marked by x.
``: (Backquotes.) Returns to the exact position of the previous mark or context after a move.
'': (Apostrophes.) Returns to the beginning of the line of the previous mark or context.
這是書籤的主要作用,但是可以利用他來標識一個區域作刪除。
這是因爲d/y命令(事實上是所有VI命令)的一個很明顯的特徵:action+position。
於是得到利用書籤作cut/copy詳細步驟:

Cut and Paste:

  1. Place the cursor at the beginning of the block you want to CUT.
  2. Mark it with md
  3. Go to the end of the block.
  4. Cut it with d'd
  5. Go to the new location that you want to PASTE those text.
  6. Press P.

Copy and Paste:

  1. Place the cursor at the beginning of the block you want to COPY.
  2. Mark it with my
  3. Go to the end of the block.
  4. Copy it with y'y
  5. Go to the new location that you want to PASTE those text.
  6. Press P.

The name of the mark used is related to the operation (d:delete or y:yank).

 

第二種表示文本區域的方式是使用VI的Visual Mode可視化選取,這個就非常像GUI了,只是是用鍵盤而不是鼠標來移動光標。

Cut and paste:

  1. Position the cursor where you want to begin cutting.
  2. Press v (or upper case V if you want to cut whole lines).
  3. Move the cursor to the end of what you want to cut.
  4. Press d.
  5. Move to where you would like to paste.
  6. Press p to paste after the cursor, or P to paste before.

Copy and paste can be performed with the same steps, only pressing y instead of d in step 4.

關於如何在VI中剪切或者拷貝任意文本區域就討論完了。
參考文章: Copy, cut and paste
PS:VI其實並不難使用,只要記住幾個常用的命令就可以非常高效的工作了——http://www.worldtimzone.com/res/vi.html

Cursor movement

  • h - move left
  • j - move down
  • k - move up
  • l - move right
  • w - jump by start of words (punctuation considered words)
  • W - jump by words (spaces separate words)
  • e - jump to end of words (punctuation considered words)
  • E - jump to end of words (no punctuation)
  • b - jump backward by words (punctuation considered words)
  • B - jump backward by words (no punctuation)
  • 0 - (zero) start of line
  • ^ - first non-blank character of line
  • $ - end of line
  • G - Go To command (prefix with number - 5G goes to line 5)

Note: Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines.

Insert Mode - Inserting/Appending text

  • i - start insert mode at cursor
  • I - insert at the beginning of the line
  • a - append after the cursor
  • A - append at the end of the line
  • o - open (append) blank line below current line (no need to press return)
  • O - open blank line above current line
  • ea - append at end of word
  • Esc - exit insert mode

Editing

  • r - replace a single character (does not use insert mode)
  • J - join line below to the current one
  • cc - change (replace) an entire line
  • cw - change (replace) to the end of word
  • c$ - change (replace) to the end of line
  • s - delete character at cursor and subsitute text
  • S - delete line at cursor and substitute text (same as cc)
  • xp - transpose two letters (delete and paste, technically)
  • u - undo
  • . - repeat last command

Marking text (visual mode)

  • v - start visual mode, mark lines, then do command (such as y-yank)
  • V - start Linewise visual mode
  • o - move to other end of marked area
  • Ctrl+v - start visual block mode
  • O - move to Other corner of block
  • aw - mark a word
  • ab - a () block (with braces)
  • aB - a {} block (with brackets)
  • ib - inner () block
  • iB - inner {} block
  • Esc - exit visual mode

Visual commands

  • > - shift right
  • < - shift left
  • y - yank (copy) marked text
  • d - delete marked text
  • ~ - switch case

Cut and Paste

  • yy - yank (copy) a line
  • 2yy - yank 2 lines
  • yw - yank word
  • y$ - yank to end of line
  • p - put (paste) the clipboard after cursor
  • P - put (paste) before cursor
  • dd - delete (cut) a line
  • dw - delete (cut) the current word
  • x - delete (cut) current character

Exiting

  • :w - write (save) the file, but don't exit
  • :wq - write (save) and quit
  • :q - quit (fails if anything has changed)
  • :q! - quit and throw away changes

Search/Replace

  • /pattern - search for pattern
  • ?pattern - search backward for pattern
  • n - repeat search in same direction
  • N - repeat search in opposite direction
  • :%s/old/new/g - replace all old with new throughout file
  • :%s/old/new/gc - replace all old with new throughout file with confirmations

Working with multiple files

  • :e filename - Edit a file in a new buffer
  • :bnext (or :bn) - go to next buffer
  • :bprev (of :bp) - go to previous buffer
  • :bd - delete a buffer (close a file)
  • :sp filename - Open a file in a new buffer and split window
  • ctrl+ws - Split windows
  • ctrl+ww - switch between windows
  • ctrl+wq - Quit a window
  • ctrl+wv - Split windows vertically
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章