读书人

vi应用技巧在VI中剪切或者拷贝任意

发布时间: 2012-08-03 00:12:14 作者: rapoo

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

一直用dd, dw, d$, d0,却很少在VI中剪切或者拷贝任意区域,但是这个是很常见的需求,google并试验了一下,这里总结一下。

?

使用VI剪切或者拷贝某个区域,其实跟我们在GUI编辑器上的操作差不多的,不外乎是如下步骤:

    ?mark the region you want to cut/copy?cut/copy it?move to where you want to paste?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:

    Place the cursor at the beginning of the block you want to CUT.Mark it with mdGo to the end of the block.Cut it with d'dGo to the new location that you want to PASTE those text.Press P.

Copy and Paste:

    Place the cursor at the beginning of the block you want to COPY.Mark it with myGo to the end of the block.Copy it with y'yGo to the new location that you want to PASTE those text.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:

    Position the cursor where you want to begin cutting.Press v (or upper case V if you want to cut whole lines).Move the cursor to the end of what you want to cut.Press d.Move to where you would like to paste.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 pastePS:VI其实并不难使用,只要记住几个常用的命令就可以非常高效的工作了——http://www.worldtimzone.com/res/vi.html

Cursor movementh - move leftj - move downk - move upl - move rightw - 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 lineG - 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 texti - start insert mode at cursorI - insert at the beginning of the linea - append after the cursorA - append at the end of the lineo - open (append) blank line below current line (no need to press return)O - open blank line above current lineea - append at end of wordEsc - exit insert mode

Editingr - replace a single character (does not use insert mode)J - join line below to the current onecc - change (replace) an entire linecw - change (replace) to the end of wordc$ - change (replace) to the end of lines - delete character at cursor and subsitute textS - 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 modeo - move to other end of marked areaCtrl+v - start visual block modeO - move to Other corner of blockaw - mark a wordab - a () block (with braces)aB - a {} block (with brackets)ib - inner () blockiB - inner {} blockEsc - exit visual mode

Visual commands> - shift right< - shift lefty - yank (copy) marked textd - delete marked text~ - switch case

Cut and Pasteyy - yank (copy) a line2yy - yank 2 linesyw - yank wordy$ - yank to end of linep - put (paste) the clipboard after cursorP - put (paste) before cursordd - delete (cut) a linedw - delete (cut) the current wordx - 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 patternn - repeat search in same directionN - 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 windowctrl+ws - Split windowsctrl+ww - switch between windowsctrl+wq - Quit a windowctrl+wv - Split windows vertically

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

?

?

读书人网 >操作系统

热点推荐