# vi/vim 文本编辑器

vi/vim 文本编辑器

1、简介

1.1 命令简介

vi -h 我们可以看到如下关于vi的帮助

usage: vim [arguments] [file ..]       edit specified file(s)
   or: vim [arguments] -               read text from stdin #从标准输入中读入text shell编程中使用
   or: vim [arguments] -t tag          edit file where tag is defined #直接查找某函数或变量,并打开包含这个tag的文件。设定tag 需用ctags命令生成tags list后才能使用

   大家可以用gcc编一个c的程序测试一下,还是很好用的。
   or: vim [arguments] -q [errorfile]  edit file with first error #编辑错误文件,光标直接定位到第一个错误

Arguments:
   --                   Only file names after this
   -v                   Vi mode (like "vi")   #直接进入 vi编辑模式
   -e                   Ex mode (like "ex")  #直接进入 末行模式
   -s                   Silent (batch) mode (only for "ex")
   -d                   Diff mode (like "vimdiff")             #比较有用,可以对比两个或多个文件,具有代码对比功能
   -y                   Easy mode (like "evim", modeless)  #直接进入 vi编辑模式
   -R                   Readonly mode (like "view")  #只读模式
   -Z                   Restricted mode (like "rvim")
   -m                   Modifications (writing files) not allowed
   -M                   Modifications in text not allowed
   -b                   Binary mode
   -l                   Lisp mode
   -C                   Compatible with Vi: 'compatible'
   -N                   Not fully Vi compatible: 'nocompatible'
   -V[N][fname]         Be verbose [level N] [log messages to fname]
   -D                   Debugging mode
   -n                   No swap file, use memory only
   -r                   List swap files and exit
   -r (with file name)  Recover crashed session
   -L                   Same as -r
   -A                   start in Arabic mode
   -H                   Start in Hebrew mode
   -F                   Start in Farsi mode
   -T <terminal>        Set terminal type to <terminal>
   -u <vimrc>           Use <vimrc> instead of any .vimrc
   --noplugin           Don't load plugin scripts
   -p[N]                Open N tab pages (default: one for each file) #打开多个文件tab格式, 末行模式中N/n切换上一个tab或下一个tab
   -o[N]                Open N windows (default: one for each file)   #打开多个文件窗口格式, 末行模式中N/n切换上一个win或下一个win
   -O[N]                Like -o but split vertically  #打开多个文件窗口格式(竖版), 末行模式中N/n切换上一个win或下一个win
   +                    Start at end of file   #打开文件光标直接定位到文件尾
   +<lnum>              Start at line <lnum>   #打开文件光标直接定位到第<lnum>行
   --cmd <command>      Execute <command> before loading any vimrc file
   -c <command>         Execute <command> after loading the first file
   -S <session>         Source file <session> after loading the first file
   -s <scriptin>        Read Normal mode commands from file <scriptin>
   -w <scriptout>       Append all typed commands to file <scriptout>
   -W <scriptout>       Write all typed commands to file <scriptout>
   -x                   Edit encrypted files
   --startuptime <file> Write startup timing messages to <file>
   -i <viminfo>         Use <viminfo> instead of .viminfo
   -h  or  --help       Print Help (this message) and exit
   --version            Print version information and exit

1.2 常用的三种模式

vi编辑器主要有三种模式:

编辑模式:自由输入文本内容,和普通操作文本类似

命令模式:通过命令直接编辑和控制文本光标

末行模式:通过命令保存文件或退出vi编辑器,即在屏幕最下面冒号后输入的命令

1.3 模式之间的切换

命令模式 -> 编辑模式

使用命令vi filename打开vi编辑器,首先进入的是命令模式。通过使用使用编辑键(a, i, o 等后面会介绍)自动进入编辑模式。

编辑模式 -> 命令模式

按[ESC]键退出编辑模式进入命令模式

命令模式 -> 末行模式

按[:] 直接可输入末行模式中的命令

末行模式 -> 命令模式

按[ESC]键退出末行模式进入命令模式

2、命令模式

2.1 光标定位命令

H 光标前移一个字符

J 光标下移一行

K 光标上移一行

L 光标后移一个字符

0 光标移动到行的最前面

$ 光标移动到行的最后面

w 移动到下一个单词的第一个字母

e 移动到下一个单词的最后一个字母

b 移动到上一个单词的第一个字母

^ 移动到当前光标所在行的第一个非空字符

[n]- 上移n行 (不加n 上移一行)

[n]+ 下移n行 (不加 n 下移一行)

nG 移动到第n行

[ctrl] d 下移半页

[ctrl] f  下移一页

[ctrl] u 上移半页

[ctrl] b 上移一页

fx 向右移动到x字符

Fx 向左移动到x字符

tx 向右移动到x字符前

Tx 向左移动到x字符前

; 重复一次fx/Fx操作

, 反方向重复一次fx/Fx操作

按下[/]末行输入需要查找的关键词,按[Enter]查找, 操作类似于末行模式

/x 向下查找有x字符的位置

?x 向上查找有x字符的位置

n 重复一次

N 反方向重复一次

[n]( 移动到上一个句子的第一个字符,空白段落也会当做一个句子,以!.?作为界定

[n]) 移动到下一个句子的第一个字符,空白段落也会当做一个句子,以!.?作为界定

[n]{ 移动到上一个段落的第一个字符,空白段落也会停顿一次,以空白行作为界定

[n]} 移动到下一个段落的第一个字符,空白段落也会停顿一次,以空白行作为界定

**n可选跳转n行

2.2 文本修改命令

编辑插入模式与编辑替换模式通过[insert]键切换

a 从光标所在位置之后开始添加内容,进入编辑插入模式

A 从光标坐在行之后开始添加内容,进入编辑插入模式

i  从光标所在位置之前开始添加内容,进入编辑插入模式

I 从光标坐在行之前开始添加内容,进入编辑插入模式

o 在光标所在行新增一行开始添加内容,进入编辑插入模式。

O 在光标所在行上面新增一行开始添加内容,进入编辑插入模式。

x 删除光标所在字符

dd  删除光标所在行(确切的说是剪切)可以通过p粘贴 ndd 向下删除n行

cc 删除光标所在行(确切的说是剪切)可以通过p粘贴 进入编辑模式

yy 复制一行 nyy 复制光标下n行

p 粘贴缓存区的内容,复制到光标后

P 粘贴缓存区的内容,复制到光标前 (大写P)

r 进入编辑替换模式,输入内容直接替换内容,只能替换一个,替换完成后即回到命令模式

R 进入编辑替换模式,输入内容直接替换内容,替换多个,需要手动回到命令模式

s 删除光标所在字符,并进入编辑模式

S 删除光标所在行,并进入编辑模式

u 撤销最近一次修改,可操作多次

U 撤销对当前行的所有修改

[Ctrl] + R 重做撤销内容

d y c + 光标定位 组合命令

定位可以是下列几个:
    e     光标所在位置到该字的最后一个字母     ex. ye常用语复制一个单词

    w     光标所在位置到下个字的第一个字母     

    b     光标所在位置到上个字的第一个字母

  G     光标所在位置到最后一行

    $     光标所在位置到该列的最后一个字母     

    0     光标所在位置到该列的第一个字母     

    )     光标所在位置到下个句子的第一个字母     

    (     光标所在位置到该句子的第一个字母     

    }     光标所在位置到该段落的最后一个字母
    {    光标所在位置到该段落的第一个字母

   

3、末行模式(行命令模式)

3.1 保存退出命令

q!不保存退出

wq!保存退出

不加感叹号按提示信息操作确认/取消

ZZ 保存退出,无提示

3.2 文本替换

:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

** n 为数字,若 n 为 .,表示从当前行开始到最后一行

:%s/vivian/sky/ 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g 替换每一行中所有 vivian 为 sky (g是贪婪匹配,正则用法)

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/ 也可以使用+ 来作为分隔符代替/(替换文本中/)

3.3 配置编辑器

在末行模式下可以使用set命令对vi做一些配置,常用的有:

:set nu显示行号 
:set nonu隐藏行号 
:set ic设置搜索时忽略大小写 
:set noic搜索时对大小写敏感 
:set list显示不可视字符 
:set nolist不显示不可视字符 
:set showmode显示当前操作模式 
:set shownomode不显示当前操作模式 
:set all显示所有的vi环境变量设置

:set fileformat=unix   #将文件修改为unix格式,如win下面的文本文件在linux下会出现^M。

在行命令模式中设置的配置都不能保存,如果需要保存我们需要在$HOME/下新增一个.vimrc的配置文件,.开头文件默认隐藏文件,ls -a查看:

echo "set nu" >> .vimrc

这样vi编辑器中就默认显示行号了

vi自定义配置文件可以扩展很多功能,大家可以参考这篇文章

http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html

3.4 编辑其他文件

:e otherfilename

直接切换当前编辑文件为另外一个文件,需要先保存当期文件:w

4、高级应用

4.1 自定义复制

命令模式下按v/[ctrl]+v/V进入visual模式可以自定义选择,之后按方向键HJKL选择需要复制和删除的内容,之后用y,p或d命令复制黏贴和删除。

v 行字符选择

[ctrl]+v 列字符选择

V 整行选择

4.2 多窗口编辑

在打开一个文件的同时,末行模式下可以用:sp [filename]多窗口打开另一个文件,默认情况下再开这个文件。

[ctrl] + w + k/j 切换窗口

:q! or : wq! 关闭当前窗口不保存/保存文件

vi -d file1 file2 可以看到这样的代码对比预览 -d different 同样[ctrl] + w + k/j 切换窗口

4.3 多文件编辑

我们可以用vi filename1 filename2 ...同时打开多个文件

:file 查看当前打开文件

:N 编辑上一个文件

:n 编辑下一个文件

vi -p filename1 filename2 以两个pages方式打开两个文件

vi -o filename1 filename2 以两个水平方式打开两个文件 大O选项则是垂直方式

5、总结

本文只是简单了介绍vi编辑器常用的一些功能和操作命令,老外可以把vi编辑器写成一本书,what's a awesome one! 其实能熟练掌握vi常用的一切操作已经很不容易了。万事开头难,这个编辑器不像windows中的记事本那么友好,但是功能灰常强大,就像学五笔一样,刚开始很痛苦,学成了就天下无敌了!好了就到这里,如果以后有补充的,我会继续添加内容。下一次我们学习Linux文件操作命令。

6、参考资料

鸟哥的私房菜Linux基础篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xxpr_ybgg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值