vi使用技巧——在VI中剪切或者拷贝任意文本区域

一直用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

Another good vim commands cheatsheet and a vi introduction using the "cheat sheet" method

 

 

 

展开阅读全文

没有更多推荐了,返回首页