UNIX 中的 vi 编辑器
UNIX 操作系统附带的默认编辑器称为 vi(可视化编辑器)。使用 vi 编辑器,我们可以编辑现有文件或从头开始创建新文件。我们也可以使用这个编辑器来读取一个文本文件。
句法:
vi filename
输入:
输出:
vi 编辑器中的操作模式 vi 中有三种操作模式:
- 命令模式: vi 启动时,处于命令模式。这种模式是 vi 将我们键入的任何字符解释为命令的地方,因此不会在窗口中显示它们。这种模式允许我们在文件中移动,以及删除、复制或粘贴一段文本。
要从任何其他模式进入命令模式,需要按[Esc]键。如果我们已经处于命令模式时按 [Esc],那么 vi 将发出哔哔声或使屏幕闪烁。 - 插入模式:此模式使您能够在文件中插入文本。在此模式下输入的所有内容都被解释为输入,最后将其放入文件中。 vi 总是以命令模式启动。要输入文本,您必须处于插入模式。要进入插入模式,您只需键入 i。要退出插入模式,请按 Esc 键,这将使您回到命令模式。
- 最后一行模式(转义模式):行模式通过键入冒号 [:] 调用,而 vi 处于命令模式。光标将跳到屏幕的最后一行,vi 将等待命令。此模式使您能够执行诸如保存文件、执行命令等任务。
启动 vi 编辑器
您可以通过以下方式开始使用 vi 编辑器:
Commands and their Description
- vi filename: Creates a new file if it already not exist, otherwise opens existing file.
- vi -R filename : Opens an existing file in read only mode.
- view filename : Opens an existing file in read only mode.
在文件中移动(导航):
要在文件中移动而不影响文本,必须处于命令模式(按 Esc 两次)。以下是一些可用于一次移动一个字符的命令。
Commands and their Description
- k : Moves the cursor up one line.
- j : Moves the cursor down one line.
- h : Moves the cursor to the left one character position.
- l : Moves the cursor to the right one character position.
- 0 or | : Positions cursor at beginning of line.
- $ : Positions cursor at end of line.
- W : Positions cursor to the next word.
- B : Positions cursor to previous word.
- ( : Positions cursor to beginning of current sentence.
- ) : Positions cursor to beginning of next sentence.
- H : Move to top of screen.
- nH : Moves to nth line from the top of the screen.
- M : Move to middle of screen.
- L : Move to bottom of screen.
- nL : Moves to nth line from the bottom of the screen.
- colon along with x : Colon followed by a number would position the cursor on line number represented by x.
控制命令(滚动):有以下有用的命令可以与控制键一起使用:
Commands and their Description:
- CTRL+d : Move forward 1/2 screen.
- CTRL+f : Move forward one full screen.
- CTRL+u : Move backward 1/2 screen.
- CTRL+b : Move backward one full screen.
- CTRL+e : Moves screen up one line.
- CTRL+y : Moves screen down one line.
- CTRL+u : Moves screen up 1/2 page.
- CTRL+d : Moves screen down 1/2 page.
- CTRL+b : Moves screen up one page.
- CTRL+f : Moves screen down one page.
- CTRL+I : Redraws screen.
在文件中编辑和插入(输入和替换文本):要编辑文件,我们需要处于插入模式。从命令模式进入插入模式的方法有很多种。
- i : Inserts text before current cursor location.
- I : Inserts text at beginning of current line.
- a : Inserts text after current cursor location.
- A : Inserts text at end of current line.
- o : Creates a new line for text entry below cursor location.
- O : Creates a new line for text entry above cursor location.
- r : Replace single character under the cursor with the next character typed.
- R : Replaces text from the cursor to right.
- s : Replaces single character under the cursor with any number of characters.
- S :Replaces entire line.
删除字符:这里列出了可用于删除打开文件中的字符和行的重要命令。
- X Uppercase: Deletes the character before the cursor location.
- x Lowercase : Deletes the character at the cursor location.
- Dw : Deletes from the current cursor location to the next word.
- d^ : Deletes from current cursor position to the beginning of the line.
- d$ : Deletes from current cursor position to the end of the line.
- Dd : Deletes the line the cursor is on.
复制和粘贴命令:使用以下命令从一个位置复制行或单词并将它们粘贴到另一个位置。
- Yy : Copies the current line.
- 9yy : Yank current line and 9 lines below.
- p : Puts the copied text after the cursor.
- P : Puts the yanked text before the cursor.
ex 模式的保存和退出命令:在键入以下命令之前,需要按[Esc]键后跟冒号 (:):
- q : Quit
- q! : Quit without saving changes i.e. discard changes.
- r fileName : Read data from file called fileName.
- wq : Write and quit (save and exit).
- w fileName : Write to file called fileName (save as).
- w! fileName : Overwrite to file called fileName (save as forcefully).
- !cmd : Runs shell commands and returns to Command mode.
在(ex 模式)中搜索和替换: vi还具有强大的搜索和替换功能。搜索的正式语法是:
:s/string
例如,假设我们要搜索字符串“geeksforgeeks”的一些文本输入以下内容并按 ENTER 键:
:s/geeksforgeeks
输入:
输出:在文本中找到“geeksforgeeks”的第一个匹配项将被突出显示。
用当前行中的另一个字符串替换一个字符串的语法是:
:s/pattern/replace/
这里“pattern”代表旧字符串,“replace”代表新字符串。例如,要用“geeksforgeeks”来替换一行中出现的“geeks”这个词:
:s/geeksforgeeks/gfg/
输入:
输出:
替换整个文本中每个出现的字符串的语法是相似的。唯一的区别是在“s”前面添加了一个“%”:
:%s/pattern/replace/
因此,对整个文本而不是单行重复前面的示例将是:
:%s/gfg/geeksforgeeks/
参考: http : //www.linfo.org/vi/