第十章 vi文字处理器

编辑器 vi 1.一般模式 2.编辑模式 3.命令行模式

注意:在vi编辑模式中 Tab键与空格键的不同

向上(k)   向下(j)  向左(h)  向右(l)

ctrl+f = page down

ctrl+b = page up

ctrl+d = 向下半页

ctrl+u = 向上半页

一般模式下操作:

  0 移动到该行的最前一个字符

  $ 移动到这一行的最后一个字符处

  G 移动到该文件的最后一行

  gg 移动到这个文件的第一行

  n <enter> 光标向下移动N行

  /word 向下搜索

  ?word 向上搜索

  n 重复向下搜索

  N 重复向上搜索

  :n1,n2s/word1/word2/g #在n1到n2行中查找word1并将word1 替换为word2

  :1,$s/word1/word2/gc #在第一行到最后一行中查找word1 并替换为word2,其中c为要求用户确认

  x 向后删除一个字符  = del

  X 向前删除一个字符 = backspace

  dd 删除光标所在的行

  ndd 向下删除N行

  yy 复制一行

  nyy 复制n行(向下)

  p/P 将复制的数据粘贴光标的下一行 P为粘贴到上行

  ctrl + r 重复上一个操作

  .  重复前一个动作

编辑模式操作:

  i 在当前光标前插入

  I在当前行的第一个非空格字符处插入

  a/A 在当前光标后插入  A为在光标所在的行的最后一个字符处插入

  r/R 替换光标所在的字符 (按 r 后再按要替换的字符) R 一直替换光标所处的文字 直到ESC终止

命令行模式:

  ESC 退出编辑模式到一般模式

  :W 将编辑数据存盘 :w! 强制存盘 :w filename (另存为)

 :q 离开  :q!强制离开,不存盘

  :wq  保存并离开   :wq! 强制保存并离开

  :e! 将文件还原到原始状态

  :r 读入另一个文件的数据

  :!command 暂离开vi 执行command 命令并显示结果

  :set nu 设置行号 :set nonu取消行号

  产生的*.swp文件为vi的临时文件

alias 设置别名

块选择:

v 将光标经过处反选 

ctrl + v 选择长方形区域

d 将选中区域删除

多文件选择:

vi file1 file2  其中命令n 编辑下一个 N编辑上一个 :files 列出所有打开文件

在一个窗口中打开多个文件:

在命令行模式输入:  :sp filename 窗口切换:ctrl+w+j/k

vim动作记录文件:~/.viminfo 记录环境设置参数

:set back #是否自动存储备份文件

:set backspace=(0/2) 0/1 仅可删除输入的文字 2可删除任意文字

:set all 显示所有环境参数

vim 设置存放在 /etc/vimrc文件中

dos与linux的换行符不同,在不同系统之间复制纯文本文件需要使用以下命令来转换:

dos2unix / unix2dos 

-k 保留该文件的mtime时间

-n 保留旧文件 输出到新文件

课后习题&答案

1.我要在某个档案的第 34 行向右移动 15 个字符,应该在一般模式下达什么指令?

答:1.  34G    2.    15l

2.在 vi 里面, PageDown 按钮可以使用什么组合键来取代?

答:ctrl+f

3.如何在一行中,移动到行头及行尾?

答:行头:0  行尾:$

4.如何在一行中,移动到行首或行尾?

答:gg 移动到行首  G 移动到行尾

5.vi 里面, r 有什么功能?

答:r有替换光标所在的字符

6.如何将目前的页面另存新档?

答::w! filename

7.在 linux 底下最常使用的文书编辑器为 vi ,请问如何进入编辑模式?

答:i/I a/A 为在本行当中插入

    o/O 在新的一行插入

    r/R 取代字符

8.如何由编辑模式跳回一般模式?

答:按 ESC

9.若上下左右键无法使用时,请问如何在一般模式移动光标?

答:向上(k)   向下(j)  向左(h)  向右(l)

10.若 [pagedown] [ pageup] 在一般模式无法使用时,如何往前或往后翻一页?

答:ctrl+f = page down 

    ctrl+b = page up

11.如何到本档案的最后一行、第一行;本行的第一个字符、最后一个字符?

答:最后一行 G  第一行 1G 第一个字符0  最后一个字符$

12.如何删除一行、n行;如何删除一个字符?

答:dd 删除 ndd 删除n行 x/X 删除一个字符

13.如何复制一行、n行并加以贴上?

答:yy复制一行 nyy复制n行 p粘贴/P粘贴

14.如何搜寻 string 这个字符串?

答:/string 向下搜索 ?string 向上搜索

15.如何取代 word1 成为 word2,而若需要使用者确认机制,又该如何?

答::0,$s/word1/word2/g 搜索word1 并用word2 替换,:0,$s/word1/word2/gc 确认机制

16.如何读取一个档案 filename 进来目前这个档案?

答::r filename

17.如何另存新档成为 newfilename?

答::w! filename

18.如何存档、离开、存档后离开、强制存档后离开?

答::w存档 :q 离开 :wq 存档后离开 :wq!强制存档后离开

19.在 vi 底下作了很多的编辑动作之后,却想还原成原来的档案内容,应该怎么进行?

答::e! 

20.我在 vi 这个程序当中,不想离开 vi ,但是想执行 ls /home 这个指令,vi 有什么额外的功能可以达到这个目的:

答::! ls /home

21.如何设定与取消行号?

答::set nu 设置  :set nonu 取消