Linux系统中的vi/vim指令【详解】

    vi是Unix世界里极为普遍的全屏幕文本编辑器,vim是它的改进版本Vi IMproved的简称。几乎可以说任何一台Unix机器都会提供这套软件。

    只要简单的在Shell下执行vi就可以进入 vi 的编辑环境。在实际操作之前先对它有个了解会比较好。

    vi 有两种模式,输入模式以及指令模式。输入模式即是用来输入文字资料,而指令模式则是用来下达一些编排文件、存档、以及离开 vi 等等的操作指令。当执行 vi 后,会先进入指令模式,此时输入的任何字元都视为指令。

第一步:

1文本编译工具vi使用

vi的名字取自于visual,意为“直观”,它是一个全屏幕编辑程序。还有gedit、emacs在Linux系统中vi是最常用的编辑程序,它的文本编辑功能十分强大,但使用起来比较复杂。

2Linux系统中的vi其实是vim,是vi的增强版。vi编辑程序有两种工作模式:

命令模式(指令模式):此模式下的按键当作指令来处理。

输入模式:此模式的按键作为真正的输入。

第二步:

     vi操作模式的切换,要进入输入模式,可以按如下命令键:

新增:‘a’,从光标后开始输入文本。‘A’,从光标所在行末尾输入新的文本。

插入:‘i’,从光标前开始插入文本。‘I’,从光标行的第一个非空格字符前开始插入文本。

开始:‘o’,从光标所在行下新增一行并进入输入模式。‘O’,从光标所在行上新增一行并进入输入模式。

第三步: 

    从输入模式按ESC进入命令模式

第四步: 

    进入和退出vi

进入vi,在提示符下:

vi

vi 文件名

退出vi,在指令模式下:

:q,退出

:wq,存盘后退出

:q!,不存盘强制退出

:x,强制存盘退出

第五步:

     删除和修改文本

指令模式下:

x:删除光标处的一个字符

dd:删除光标所在行

r:修改光标所在字符

R:进入改写状态

s:删除光标所在字符,并进入输入状态

S:删除光标所在行,并进入输入状态

第六步:

     光标移动

1指令模式下:

h:向左移动一列

j 或+:向下移动一行

k 或-:向上移动一行

l:向右移动一列

组合:nh,nj,nk,nl。分别是移动n行(列)

在有方向键的键盘上,无论指令模式或输入模式都可以用方向箭头来移动光标

2光标按行移动

指令模式下:

:n回车:将光标移动到第n行

:$回车或者L:将光标移动到最后一行

M:将光标移动到中间一行

H:将光标移动到第一行

:set number:显示行号

:set nonumber:取消显示行号

  3光标按单词移动

指令模式下:

w:将光标移动到下一个单词头

b:将光标移动到前一个单词头

e:将光标移动到下一个单词尾

组合:nw、nb、ne

4光标按字符移动

指令模式下:

$:将光标移动到当前行尾

^或0:将光标移动到当前行首

n|:将光标移动到当前行的第n个字符

fm:将光标移动到当前行的下一个字符m处

光标返回原处

两个单引号‘’

第七步: 

    文本编辑

1翻页

指令模式下:

Ctrl+d:下翻半屏

Ctrl+u:上翻半屏

Ctrl+f:下翻一屏

Ctrl+b:上翻一屏

  2查找

指令模式下:

/string:从当前位置向前查找字符串string

?string:从当前位置向后查找字符串string

继续查找:

n:沿前述查找方向继续查找同一字符串

N:沿前述查找方向的反方向继续查找同一字符串

3删除文本

指令模式下:

x:删除字符

dw:删除单词

dd:删除行

D:删除从光标到行末所有字符

dfm:删除从光标到第一个字符m间的文本

:5d:删除第5行

:5,$d:删除从第5行到最后一行

可以和整数n组合

  4撤销和重复命令

指令模式下:

u:撤销最后一个更改操作

U:撤销对本行的所有修改

  5文本替换

指令模式下:

m:替换当前字符为m,替换后仍为命令模式

R:替换当前字符后的一系列字符,替换后变为输入模式。

s:多个字符替换单个字符

cw:单词替换

cc:行替换

C:替换当前行剩余部分

cfm:替换当前字符到指定的字符m

  6文本删除与替换对比

          命令类型           删除           替换

             字符                 x                r

             单词               dw             cw

              行                  dd              cc

   从光标到行尾         D               C

    从光标到字符m     dfm           cfm

  7全局替换

指令模式下:

搜索当前行的第一个实例

:s/bash/sch把当前行的第一个bash换为sch

搜索指定行的第一个实例

:1,10s/bash/sch 把1到10行bash换为sch

:5,$s/bash/sch 把5到末行bash换为sch

设置过滤条件进行搜索

:g/var/s/bash/sch把包含var行中的bash替换为sch

同一行中替换所有实例

:s/bash/sch/g把当前行中所有bash替换为sch

替换整个文件中的所有实例

:1,$s/bash/sch/g把整个文件中的bash替换为sch

8移动和复制文本

指令模式下:

yy:复制当前行

dd:剪切当前行(删除)

p、P:粘贴当前行

 

9复制和移动文本块

指令模式下:

把某(几)行复制并粘贴到某行后

:5 copy8 把5行复制并粘贴到第8行后

:1,5 copy$ 把1-5行复制并粘贴到末行后

.,$ copy0 把当前行到末行复制并粘贴到文件头

把copy改为move即为移动文本块(注:.表示当前行,0表示文件头,$表示文件尾)

第八步: 

    文件保存

    指令模式下:

:w 保存文件

:wq或者:x或者ZZ 保存并退出vi,返回linux提示符

:w f1.c 把当前文件另存为f1.c

:q! 放弃对文件的保存,直接退出

  1保存文本块

指令模式下:

:2,5 write f2 把第2到第5行另存为文件f2

保存文本块,并直接覆盖掉已有(如果有)文件

:2 write! f2 把第2行强行另存为文件f2

向文件追加文本

:2 write >> f2 把第2行追加到文件f2末尾

第九步: 

    与shell交互

指令模式下:

读某文件的内容到当前打开文件

:5 read a 把文件a中的内容读到当前打开文件的第5行后

在vi中执行shell命令

:!pwd

在vi中执行shell命令,并把结果添加到vi中

:5 read! pwd把pwd执行结果插入到第5行后

:e 在vi中编辑某文件时,不退出vi而建立新文件

:n 在vi中编辑某文件时,不退出vi而加载新文件

原文地址:https://www.cnblogs.com/z432110/p/10651398.html