Vim 编辑器平时使用到的功能总结

目录

vim文件编辑器  [重点]

全局配置:

文件编码格式

1:在vim中通过set属性, 修改当前文件编码:

enconv 转换文件编码

iconv  转换

基本上vi分为三种模式:

1:一般命令模式: 

2: 编辑模式: 

插入模式 --insert--

替代模式 -- replace--

3:指令类命令模式(命令行模式)

一般命令模式的常用操作:

1.行跳转:

2.列跳转:

3.查找:

1》查找光标当前所在的词

2》在查找关键词之间跳转:

4.替换内容

关于range的规定为:

替换  注意分隔符的使用  / , | . @ , $

替换  注意引用变量使用双引号

替换  注意特殊符号( 是 使用转义符 \( 表示

sed 替换方式:

正则表达式在Vim中的使用

1.起始和结束行标说明:

2.vim常见使用实例:

:1,s/old/new/g 全文替换;  

:%s/old/new/g 全文替换:  

使用替换多行添加注释  n1,n2s/^/#/g

使用区域操作添加注释  //

行整体左右移动  n1,n2 >  ,   n1,n2 <

删除字符

删除行​​​ 

复制列

撤销与恢复:

一般指令模式切换到编辑模式

vim的暂存档 救援回复 和 开启时的警告功能

Vim的额外功能:

区块选择V v:

多文件编辑

多窗口功能:

同时打开几个窗口操作 sp  vsp

多个分屏之间切换: Ctrl +w 两次

结合sp  和 vsp  同时i查看多个文件:   

挑字补全功能

自动补全快捷键 Ctrl + p  

测试:

vim环境设定与记录:  /etc/.vimrc    ~/.viminfo

vim中执行shell命令 [重点]

第一种 :!command

第二种:r!command

第三种:n1,n2!command

第四种:n1,n2w!command

vim 额外的问题:


vim文件编辑器  [重点]

vim 是一个强大的文件编辑工具, 学习文件编辑之前, 首先要学习一下文件编码格式:

vim 是 vi的高级扩展, 如果Linux为最小安装版是不包含vim的,只能使用vi编辑

vim 对比vi 可以支持语法格式高亮显示, 语法检查等

全局配置:

文件编码格式

1:在vim中通过set属性, 修改当前文件编码:

:set fileencoding=utf-8

enconv 转换文件编码

要将一个GBK编码的文件修改为utf-8编码

enconv  -L  zh_CN  -x  UTF-8  filename

iconv  转换

指令格式: iconv -f encoding -t encoding  inputfile  -o outputfile

例如将一个UTF-8的文件转为GBK编码文件

iconv  -f  GBK  -t utf-8   file1  -0  file2

基本上vi分为三种模式:

一般指令模式 ; 编辑模式; 指令列命令模式

1:一般命令模式: 

使用vim filename 打开文件之后,默认的模式,进入之后最下面会显示当前文件的行数L 和字数C, 此时还不能编辑文件内容,但是可以使用文件操作命令执行光标调整, 执行删除,复制,查找,和替换等操作;

2: 编辑模式: 

首先在一般命令模式下: 使用 i , a ,o 命令进入编辑模式;

插入模式 --insert--

i:从当前光标位置的前面进行插入内容;

a:从当前光标位置的后面进行插入内容;

o:从当前光标位置所在行插入下一行插入内容;

替代模式 -- replace--

r: 录入以覆盖原内容方式输入内容; 向后replace

强制插入 --set

s: 从光标位置输入内容,当前位置的值会被替换掉,但是向后insert,比r更常用

3:指令类命令模式(命令行模式)

在一般模式下, 通过输入: 冒号后, 可在冒号之后输入命令,回车执行该命令;

一般命令模式的常用操作:

光标移动: 可以通过键盘上下左右,或者pageUp 或者pageDown 进行光标移动

也可以使用j 光标下移, k光标上移 , h光标左移 , l 光标右移

Ctrl+f : pageDown

Ctrl+b: pageUp

1.行跳转:

G : 光标移动到文档最后一行,相当于1G

nG : 其中n是数字,标识移动到第n行且光标自动为0位置, 可配合set nu 显示行号;

gg: 光标移动到文档第一行

n<Enter> : n为数字, 光标向下移动n行

2.列跳转:

0 : 光标移动到当前行0位置

$ : 光标移动到当前行最后位置

x :  删除光标处的字符;

b:  光标左移一个字符

nb : 光标左移n个字符

w : 光标右移一个字符;

nw : 光标右移n个字符;

ndb / ndw : 光标向左/右删除n个字符

nyb/ nyw : 光标向左/右 拷贝n个字符;

(: 移动到本句的句首

):  移动到下一句的句首

{: 移动到本段的段首;

} : 移动到下一段的段首;

3.查找:

/world  :    表示从光标位置向下查找world, 并高亮显示, 使用n 可以像下跳转到匹配点, 使用N 向上跳转到匹配点

?world  : 标识从光标位置向上查找world, 通过n和N的进行匹配点的跳转

想查找内容中的某个单词, 可以将贯标放在单词上, Shift +* 就可以高亮显示;

在编辑重复使用的变量名称书写验证时非常有用,

验证完 注意使用 /!@#!@#!@# 随便输入一些不存在的查找一下,取消关键字高亮显示

更快捷的办法是 : 命令行输入 nohl     全称 nohighlight 即可

1》查找光标当前所在的词

shift +*     则当前光标所在单词就高亮显示, 通过N和n 向前后查找该词   

2》在查找关键词之间跳转:

n  向后  

N  向

4.替换内容

:12,23s/[old]/[new]/g

注意行号之间用逗号分隔:

关于range的规定为:

如果不指定range,则表示当前行。

m,n: 从m行到n行。

0: 最开始一行(可能是这样)。

$: 最后一行

.: 当前行

%: 所有行

替换  注意分隔符的使用  / , | . @ , $

其中的 / , | , @ 仅仅为分割符, 避免与内容冲突即可

替换  注意引用变量使用双引号

  1.  content 替换内容中如果使用到变量,使用"s|lod-content|${new}|g"  双引号  
  2.  's|lod-content|${new}|g'单引号不支持变量, 仅替换为 ${new}  原样字符串

替换  注意特殊符号( 是 使用转义符 \( 表示

34,40s@a*\(b+c)@a*\(b-c)@g

实际案例:

我们使用cat 输入流生成Makefile文件:

cat > Makefile <<EOF

bootsect.o

        @as --32 bootsect.s  -o  bootsect.o   #前面编辑时的tab文件中为空格

EOF

由于Makefile文件的指令入口是Tab, 而 上面创建的Makefile的target指令是以8个空格起始

要修改Makefile 中的8个空格为Tab空格,  注意这里的8需要根据vim的tab空格设置而定

sed 替换方式:

sed  -i   "s/        /\t/g"  Makefile 

正则表达式在Vim中的使用

高级的查找替换就要用到正则表达式。

\d: 表示十进制数(我猜的)

\s: 表示空格

\S: 非空字符

\a: 英文字母

\|: 表示 或

\.: 表示.

{m,n}: 表示m到n个字符。这要和 \s与\a等连用,如 \a\{m,n} 表示m 到n个英文字母。

{m,}: 表示m到无限多个字符。

**: 当前目录下的所有子目录。

1.起始和结束行标说明:

  1. 有起始行号, 有结束行号, 在范围内操作[n1,n2]  包含行号本身
  2. 省略起始行号, 省略结束行号 , 省略的行号代表当前行   :s/old/new/g
  3. 省略起始行,有结束行号:操作当前行到结束行号的数据    : ,8s/old/new/g
  4. 有起始行号, 省略结束行,操作起始行号到当前行的数据   :5,s/old/new/g
  5. $代表结束行标号,有起始和结束行号, $-2 , 表示从起始行号到倒数第2行  

实例: 2,$-2d  删除2值倒数第2行数据  d表示删除

实例:$-5,$-2y  拷贝倒数第5行至倒数第2行数据  y表示拷贝

2.vim常见使用实例:

:72,73s/keyworld/setworld/g : 在72行到73行之间执行setworld 替换 keyworkd 操作

:72,73s/keyworld/setworld/gc: 同上的替换操作,每个替换位置都会给出提示,是否替换;

:1,s/old/new/g 全文替换;  

:%s/old/new/g 全文替换:  

其中的 / , | , @ 仅仅为分割符, 避免与内容冲突即可

:%s/Line/\\nLine/g

:%s@old_content@new_content@g

:1,$s/\, fflush\(stdin\)/  /g     (特别提醒, 尤其出现特殊符号问题的时候)

1,$s/i  \)/i,  fflush(stdin))/g    但是反过来替换部分不需要转换符\

使用替换多行添加注释  n1,n2s/^/#/g

其实就是将开头^表示起始位置, 替换为#即可;

如果注释信息是//  可以使用 n1,n2s@^@//@g

添加完成后,要除去高连 : nohl 即可

使用区域操作添加注释  //

 首先按区域选择  选择首字符  按 Ctrl+V  然后向下划过所有行首字符 然后 Shift + I  此时输入要插入的注释符号, 最后Esc 退出 按j k 等移动光标刷新试图, 发现注释符 插入所有行中  

行整体左右移动  n1,n2 >  ,   n1,n2 <

n1,n2 >  n1 到n2行数据整体右移

n1,n2 <  n1 到n2行数据整体左移

删除字符

x /X   :  x向后删除一个字符, X向前删除一个字符

nx : n为数字, nx 表示向后删除n个字符

向后删除单词 diw, 遇到空格停止

  1. 删除行​​​ 

dd: 光标所在行

ndd: n为数字, 表示从光标所在在行向后删除n行;

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

n1,n2y 从底n1行到底n2行珊瑚

d1G : 删除光标所在行到第一行之间的所有行

dG : 删除光标所在行到最后一行之间的所有行;

d0 : 删除当前行光标位置左边的所有字符, 0为当前行首位置,删除0到光标位置之间内容

d$ : 删除当前行光标位置右边的所有字符, $为当前行末位置,删除光标位置到末位置内容

复制列

yy: 复制光标所在行

nyy : n为数字, 表示从光标所在行及以下n行的内容进行复制;

1,y   从第一行到最后一行复制

n1,n2y 从底n1行到底n2行复制

y1G: 复制光标所在行到第一行所有内容

yG :  复制光标所在行到最后一行所有内容

y0 :  复制当前行光标位置左侧所有内容

y$:  复制当前行光标位置右侧所有内容

p, P :  粘贴, p 表示从当前行向后插入所复制内容, P 表示向当前行之前插入复制内容

J : 将当前行 和下一行 合并到当前行 , 之间会插入一个空格;

撤销与恢复:

u  撤销上一个动作, 类似上一步

Ctrl + r   恢复执行动作, 类似下一步

.  重复前一个动作;

一般指令模式切换到编辑模式

i I   :  i为从目前光标处插入, I为从当前行的第一个非空字符开始插入;

a A  :   a 为从当前光标的下一个字符处插入, A为从当前行最后一个字符处插入

o O  :  o 从当前行下一行插入一个新行, O 为从当前行上一行插入一个新行

r R : 进入取代模式, r只会取代光标位置字符一次, R会从光标位置一直取代插入至Esc退出

Esc  : 退出编辑模式 , 回到一般命令模式

第三: 从一般命令模式进入命令行模式

只需要在一般命令行模式下输入 :  冒号即可编辑相关命令

:w    将编辑的输入写入硬盘文件中, 保存

:w!   若文件为只读,则强制写入, 但是是否写入成功,要根据文件权限而定,通常需要时文件  拥有者才可以

:q    离开vi编辑模式

:q!   若修改过内容, 不写入直接离开;

注意: ! 在vi模式下由强制执行的意思

:wq  存储后离开, 如果为wq!  强制存储后离开

:ZZ    如果文件没有变动则不存储离开, 如果文件有变动则存储后离开

:w  [filename]  将编辑的数据存储位filename 文件,相当于另存为

:r   [filename]  在编辑的数据中读入另一个文件, 即将filename这个文件内容加入光标所 在列的后面

:n1 n2  w  [filename]  将n1 到n2 的数据 存入到文件filename

:! command  暂时离开vi 指令模式执行command命令  

例如 :!  ls  /home 即在vi中关在 ls /home 命令 结果

:set nu   显示行号

:set nonu   取消显示行号

:$ 跳转到最后一行

:n 跳转到第n行

在Vi中 数字常常是很有用的,通常标识连续执行操作的次数, 20dd 标识联系删除20行

也有去到n的位置, n<Enter> 跳转到n行  或者 10j 向下移动10行, 20l向后移动20个字符

查看系统别名: alias

vim的暂存档 救援回复 和 开启时的警告功能

当我们使用vim 编辑文件时, vim会在被编辑文件所在目录下,创建一个.filename.swp 暂存档文件,用以在编辑如果出现意外时的回复;

测试

使用vim file1打开一个文件,  编辑部分内容

输入命令 Ctrl -z  组合键, vim会被丢到背景中去执行;

此时我们再次使用vim fiel1 会看到回复提示信息

由于暂存档的原因, vim 在打开文件时会对于可能有问题的文件给出以上提示信息

这些问题原因:

1:可能有其他人或者程序正在使用该文件

2:该文件的编辑出现意外

此时可以选择不同的模式对文件进行处理

  • pen  Read-Only : 只读方式打开文件
  1. dit anyway   : 正常打开文件,忽略暂存盘的内容, 这样可能存在风险,两个人可能互 相改变对方编辑文件内容, 不好

[R]ecover : 打开暂存档内容, 用于执行意外情况下文件内容的回复, 但是当确认暂存档内容并保存好文件之后,记得删除掉同目录底下的.filename.swp暂存档文件,否则在次打开还会有该风险提示信息;

[D]elete it :  当确定暂存档无用, 源文件内容正确时,可以选择 D ,删除掉同目录底下的暂存档文件

[Q]uit : 输入q 离开本次编辑

[A]bout :  忽略这个编辑行为, 类似于q ;

Vim的额外功能:

centOs中 目前即使使用vi 也模式使用的vim的编辑模式;

可是使用alias 即可查看到vi 已经内设为vim的别称;

区块选择V v:

当我们选择v 或者 V  为行选择模式; 此时上下移动光标,会选择扫过的整行

按Ctrl +v 时 ,表示进入区块选择模式, 此时使用jkhl移动光标位置,在光标经过的地方会反白显示,表示该区域为被选择区块;

v    字符选择, 会将光标经过的地方反白显示,标识已选择字符

V   列选择, 会将光标经过的列反白显示,表示已选择列

Ctrl+v  区块选择 , 此时调整光标位置,会反白选择一个长方形区块

y 将反白选择的区块复制

d 将反白选择的区块删除

p 将反白选择的区块粘贴

实际操作中发现, ctrl+v 矩形区块选择中会有因为行结尾无法扩展位置造成的部分区域无法选中的问题: 区块选择对于不连续或者区域分散的内容支持不好;

可以看到,当我从/usr/man 该行结束位置比较靠前,但是对下面的行进行选择时,返现22行有部分不发达到选择的目的;  我们执行拷贝或者删除操作只能是反白的区域

多文件编辑

有时我们可能会从一个文件中复制部分内容到另一文件中,这在windows中非常方便,直接同时打开两个文件, 一个拷贝完在另一个中粘贴; 这在linux中也是可以实现的

vim file1 file2 file3 ... -p  可以同时打开多个文件  -p 标识处每个个文件的头信息

但是需要在文件之间切换:

:n   切换到下一个文件

:N  切换到上一个文件

:files  查看当前编辑的多个文件列表

使用:n (next) 或者N 在每次切换时, 会在左下角显示当前文件的名字

多窗口功能:

#method one

#单页面操作,打开一个文件后

:e [otherfile] #打开另一个文件,进行操作即可

#method two

同时打开几个窗口操作 sp  vsp

:sp [otherfile]   #水平分页

:vsp [otherfile] #垂直分页

我们打开一个非常大的文件, 有时候我们需要对比文件前后的部分内容,却发现使用pageUp或者pageDn在文件前后挑战非常麻烦, 此时使用多窗口会非常方便;

Linux 中实现多窗口功能: 在命令行模式下

:sp  [filename]  

即可增加一个分屏窗口, 后面的filename 为可选项,如果新窗口是当前文件,可以不输入, 如果要加入另一个文件,就输入文件名

多个分屏之间切换: Ctrl +w 两次

切换到下面分屏: 注意: ctrl +w 是组合键, 之后松开在按j 或者↓  

[Ctrl+w] + j

[Ctrl+w] +↓

切换到上面分屏: 注意: ctrl +w 是组合键, 之后松开在按k 或者↑

[Ctrl+w] + k

[Ctrl+w] + ↑

测试示例:

结合sp  和 vsp  同时i查看多个文件:   

在两个屏幕之间切换, 他们可以相互复制粘贴信息;或者对比文件内容

挑字补全功能

如果在vim编辑时, 我们希望使用Table 键那样的提示功能

自动补全快捷键 Ctrl + p  

可以使用如下一些常用的组合键:

[Ctrl -x] -> [Ctrl - n ] : 通过正在编辑的[文件内容文字] 作为关键字,进行补全

[Ctrl -x] -> [Ctrl - f ] : 通过当前目录内的[文件名] 作为关键字,进行补全

[Ctrl -x] -> [Ctrl - o ] : 以扩展名进行语法补充,以vim内建的关键词,进行补全

测试:

vim ht.html  

打开一个html文件, 注意,vim内建的关键字会匹配,文件扩展名给出提示

进入编辑模式后在需要编辑的位置

Ctrl+x --> Ctrl+o   

可见如下提示信息:

vim环境设定与记录:  /etc/.vimrc    ~/.viminfo

~/.vimrc    vim reference config  vim参数设定

~/.viminfo   vim 操作历史记录文档 记录条数 ${HISTSIZE}

全局配置文件 :  /etc/vimrc

用户配置文件:cp  /etc/vimrc  ~/.vimrc    拷贝一份自定义配置

用户操作记录: ~/.viminfo

编辑自定义vim格式:在 ~/.vimrc 文件结尾添加如下代码shell语法变量赋值不能有空格

 set tabstop=4

 set number

一个是设置Tab位宽为4

另一个是设置显示行号

vim 自动补全 Ctrl + p  

vim 格式化代码 首先 gg 光标跳转到 首部, 直接按键 =G 即可格式化代码 

Sthift + %  左右对号{ }之间跳转

我们发现当编辑文件是使用了/keyworld  查询关键字, 文件内容会以反白显示,当我们关闭后,再次打开该文件, 返现上次查找的关键字仍然是反白显示,且光标位置也是上次退出的位置;

这是怎么做到的? 这些操作信息一定被记录下来了;

我们编辑文件时, vim 会自动将你曾将操作的行为记录下来, 方便再次打开时的作业, 而那个记录的文件就是  ~/.viminfo

vim 编辑文件时的各种状态,都是由许多参数定义的, 那么这些参数是什么?

:set all  

查看当前vim的环境参数设定值

:set  

查看当前vim 设定与预设不同的参数值

我们可以添加自定义的一些属性

在打开文件时,通过命令设置参数 :例如

set nu

如果想保存这些设定,避免每次设定: 编辑 ~/.vimrc

将set nu 添加到文件中保存

再次编辑文件,发现set nu 显示行号功能已经打开;

vim中执行shell命令 [重点]

​​​​​​​第一种 :!command

例如在一般模式下

:!ls -al  就可以列出当前目录的文件信息,且回车后返回vim

特别是

:!bash 命令非常好用 ,在vim中开启一个bash窗口, 使用完后,exit退出,发现还是在vim模式下, 避免了退出vim , bash 命令执行, 然后在进入vim 的麻烦;

另一个相当好用的是如果我们想将bash执行结果输入vim

可以使用

​​​​​​​第二种:r!command

例如

 :r!date 就可以直接将当前系统时间写入vim的当前行的下一个新行内;

​​​​​​​第三种:n1,n2!command

n1 和n2 都是数字, 表示起始行,和结束行

该命令是将当前编辑文档的n1到n2行的数据替换为command执行结果信息

特别好用的一个例子

:1,4!sort  可以将第一行到第4行的内容排序后在重新写回到文档中;

另一个应用

:14!tr '[a-z]' '[A-Z]' 可以将第14行的内容小写转为大写, 1表示第一行

:.!tr '[a-z]' '[A-Z]'可以将当前行的内容小写转大写 , .表示当前行

​​​​​​​第四种:n1,n2w!command

n1,n2为数字,表示起始行和结束行

该命令将n1~n2行内的数据最为shell命令执行,执行结果会在vim编辑区域下方开辟一个新的区域显示,但并不会改变当前文档的内容

例如:1,4w!sort 会将1到4行的内容排除输出到vim文档下面

特殊的使用:1w!bash 将会把第一行的内容最为bash命令来执行,并在下方写入

同样的:.w!bash 将会把当前行的内容作为bash命令执行,在下方写入

vim 额外的问题:

中文乱码问题:

Dos 与Linux 的断行字符问题

语系编码问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值