Linux每日一题——(2)vi文本编辑器

Vi简介

vi 文本编辑器有三种模式:命令模式、插入模式和末行模式(底线命令模式)。

命令模式:控制屏幕光标的移动,字符或光标的删除,移动复制某区段及进入插入模式下,活着到末行模式。

编辑模式:在编辑模式下,可以使用键盘输入文本,按Esc退出编辑模式返回到命令模式。

末行模式:将储存文件或离开编辑器,也可设置编辑环境,如寻找字符串、列出行号等。

启动vi文本编辑器:进入命令模式

vi <filename>

如果filename文件存在则打开该文件。

如果filename文件不存在则创建一个新文件。

命令模式

移动光标:

h 或 向左方向键(←)  光标向左移动一个字符

j 或 向下方向键(↓)  光标向下移动一个字符

k 或 向上方向键(↑)  光标向上移动一个字符

l 或 向右方向键(→)  光标向右移动一个字符

注意 : Unix 系统不支持上, 下, 左, 右四个方向键, Linux 系统为方便用户,在 vi 中支持上述方向键

在一行中移动

0(数字):使光标移动到当前行的开头

$:使光标移动到当前行的末尾

w:向前移动一个单词(光标定位在单词的开头)

b:向后移动一个单词(光标定位在单词的开头)

e:光标定位到单词的末尾

从一行移动到另一行

k:向上移动一行

j:向下移动一行

Ctrl+u:向上翻一页

Ctrl+d:向下翻一页

gg:使光标移动到文档第一行的第一个字符处

G:使光标移动到文档最后一行的第一个字符处

编辑模式

进入编辑模式

从命令模式输入命令: a, A, i, I进入到编辑模式。

i(insert):在当前光标位置的前面进入到编辑模式

a(append):在当前光标位置的后面进入到编辑模式I:在当前行的开头进入到编辑模式

A:在当前行的末尾进入到编辑模式

o:在当前行之后插入一个新行,并进入到编辑模式O:在当前行之前插入一个新行,并进入到编辑模式

r:替换单个字符,光标放置在要替换的字符上,按r之后vi自动进入编辑状态,输入一个需要的字符后,vi自动返回命令模式(不需要按Esc返回),非常方便。

cw:(change word)替换整个单词(光标在单词的第一个字符上),如果光标在单词的中间位置将替换光标到单词结尾之间的所有字符

删除文本

lx, X : 删除当前光标所在字符 / 前一个字符

lnx, nX : 删除从当前光标位置开始后 n 个字符 (包括当前字符) / 前 n 个字符(不包括当前字符)

lD : 删除当前光标位置开始后的该行所有字符(包括当前字符)

ldd, ndd : 删除当前光标所在行 / 当前光标所在行l开始的后 n 行

复制

yy, nyy : 复制光标所在当前行 / 光标所在当前行开始的后 n 行 (包括当前行)

yw : 复制光标位置到单词结束的字符

y$:复制光标位置到行尾的所有字符

粘贴

p (paste ): 在当前光标后粘贴

P(大写): 在当前光标前粘贴

dd+p:剪切并粘贴一行——首先dd删除当前行,把光标移动到需要粘贴的位置按p进行粘贴。

x+p:剪切并粘贴一个字符

dw+p:剪切并粘贴一个单词

d$+p:剪切并粘贴光标到行尾的所有字符

退出编辑模式

按Esc键退出编辑模式,返回到命令模式。

末行模式

在命令模式下,可输入  /,  ?,  :,  ! 等头的操作指令,完成相应的功能

/  向前查找字符串

?  向后查找字符串

:  执行文件相关操作命令

!  启动一个 shell 指令

保存文件

:w  将编辑的数据写入硬盘文件中(常用)

:w!强制写入该文件。

:q  退出编辑(常用)

:q!不保存强制退出

:wq  写入并退出

:wq! 强制写入并推出(常用)

:x 写入并退出(与wq区别:当文件没有修改时,x不更新修改时间,wq刷新文件,更新修改时间)

:e!打开新文件到vi编辑器,并放弃对当前文件的修改

ZZ 写入并退出(不加“:”,命令模式下)

保存文件(另存)

:w [filename]  将编辑的数据储存成另一个文件(类似另存新文件)

:r [filename]  在编辑的数据中,读入另一个文件的数据。亦即将【filename】这个文件内容加到游标所在行后面

:n1,n2 w [filename]  将n1到n2行的内容储存成 filename 这个文件。

显示与取消显示行号

:set nu  显示行号,设定之后,会在每一行的前缀显示该行的行号

:set nonu  与 set nu 相反,为取消行号

:! Command  暂时离开 vi 到指令列模式下执行command 的显示结果

  例如 【:! ls /home】即可在 vi 当中察看 /home 底下以 ls 输出的文件信息

搜索

/word  向光标之下寻找一个字符串名称为 word 的字符串

?word  向光标之上寻找一个字符串名称为 word 的字符串

n  重复前一个搜寻的动作

N  为反向进行前一个搜寻动作,与n相反

:s/word1/word2 在当前行搜索word1,并将第一个word1替换为word2

:n1,n2 s/word1/word2/g

  在第 n1 与 n2 行之间寻找 word1 这个字符串,并将所有word1取代为 word2 ,g(global)代表全局

  举例来说,在 100 到 200 行之间搜寻 test 并取代为 TEST 则:【:100,200s/test/TEST/g】(常用)

:1,$ s/word1/word2/gc

  从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2!且在取代前显示提示字符给使用者确认 (conform) 是否需要取代!(常用)

vi中的撤销undo和重做redo

u(undo):撤销

Ctrl+r(redo):重新执行

vi重复执行上次命令

.(句号):再次执行上一条vi命令

 

posted on 2013-01-09 22:51  不吃鱼的小胖猫  阅读(322)  评论(0编辑  收藏  举报