linux 强大的文本编辑器 vim

时间:2020-12-10 15:36:02

本文主要介绍vim的三种主要模式,快捷键操作,命令操作及解释



vi 简介:Visual Interface 可视化界面

命令行下的文本编辑器种类可分为两种,一种是行编辑器,比如sed ;一种是全屏编辑器 比如nano,vi ;vim 是vi Improved,vi的增强版


gedit ,gvim 都是简单的图形编辑器


打开文件时可以通过一些命令更方便的找到我们需要操作的位置,可以用以下命令

vim [option]...file...

             +# :打开文件后,直接让光标处于第#行的行首

             +/PATTERN :打开文件后,直接让光标处于第一次被PATTERN匹配到的行的行首

             + FILE :直接打开file文件,光标处于最后一行行首

              -b FILE :二进制方式打开文件

              -d FILE1 FILE2... :比较多个文件

              -m FILE :以只读的方式打开文件

              -e FILE :直接进入ex模式和ex file命令执行结果一样

如果该文件存在,打开文件并显示内容

如果该文件不存在,当编辑后第一次存盘时创建它


vim三种主要模式:

        命令模式(默认) : 移动光标,剪切/粘贴文本

        插入(编辑)模式 : 修改文本

        扩展命令模式 :保存,退出等 

Esc键 : 退出当前模式

Esc键 连续按两次 :总是返回到命令模式


各种关系请看下图:

linux 强大的文本编辑器 vim



各种模式的转换


命令模式 --> 插入模式


    i :insert,在光标所在处输出

    a :append,在光标所在处后面输入

    I :在当前光标所在行的行首输入

    A :在当前光标所在行的行尾输入

    o :在当前光标所在行的下方打开一个新行

    O :在当前光标所在行的上方打开一个新行


插入模式 --> 命令模式

    ESC


命令模式 --> 扩展模式

    :

扩展模式 --> 命令模式

    ESC

锁定和解锁 :

    Ctrl+s 锁定   Ctrl+q 解锁


关闭文件操作命令

  

  扩展模式:

    :q 退出

    :q! 强制退出,丢弃做出的修改

    :wq 保存并退出

     x 保存退出

  命令模式:

    ZZ :保存退出

    ZQ :不保存退出




扩展模式:


按 ': '会进入Ex模式

会创建一个命令提示符: ,并处于底部的屏幕左侧

命令如下:

  • w 将文件写到磁盘上

  • wq 将文件写到磁盘上并退出

  • x 写入并退出

  • q 直接退出

  • q! 不存盘直接退出,所有更改都将丢失

  • r filename  读文件内容到当前文件中

  • w filename  将当前文件内容写入另一个文件中

  • !command  可以直接执行shell命令

  • r!command  把执行的命令直接写入到文件中





命令 功能
字符编辑
x 删除光标处的字符
#x 删除光标处起始的后#个字符
xp 交换光标所在处的字符及其后面字符的位置
~ 转换大小写
替换命令
r 将光标所在处的字符替换为输入的字符
R 切换为REPLACE模式
删除命令
d 可结合光标跳转字符,实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dw 删除到下一个单词词首
de 删除到当前词尾或者下一个单词的词尾
db 删除到当前词首或者下一个单词的词首
#command 多次命令操作
dd 删除光标所在的行
#dd 多行删除
D 从光标位置一直删除到行尾,留空行,和d$相似
复制命令(y,yank)
y 复制,行为相似于d命令 
y$ 复制到行尾
y0 复制到非空行首
y^ 复制到行首
ye 复制到下一个单词词首
yw 复制到当前词尾或者下一个单词的词尾
yb 复制到当前词首或者下一个单词的词首
#command 多次命令操作
yy 复制光标所在的行
#yy 多行复制
Y 复制整行




命令 功能
字符编辑
x 删除光标处的字符
#x 删除光标处起始的后#个字符
xp 交换光标所在处的字符及其后面字符的位置
~ 转换大小写
替换命令
r 将光标所在处的字符替换为输入的字符
R 切换为REPLACE模式
删除命令
d 可结合光标跳转字符,实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dw 删除到下一个单词词首
de 删除到当前词尾或者下一个单词的词尾
db 删除到当前词首或者前一个单词的词首
#command 多次命令操作
dd 删除光标所在的行
#dd 多行删除
D 从光标位置一直删除到行尾,留空行,和d$相似
复制命令(y,yank)
y 复制,行为相似于d命令 
y$ 复制到行尾
y0 复制到非空行首
y^ 复制到行首
yw 复制到下一个单词词首
ye 复制到当前词尾或者下一个单词的词尾
yb 复制到当前词首或者前一个单词的词首
#command 多次命令操作
yy 复制光标所在的行
#yy 多行复制
Y 复制整行
粘贴命令(p,paste)
p 缓冲区存的数据如果为整行,则粘贴至当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
P 缓冲区存的数据如果为整行,则粘贴至当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
改变命令(c,change)
c 修改后切换成插入模式
c$ 删除到行尾并切换插入模式
c^ 删除到非空行首
c0 删除到行首
cw 删除到下一个单词词首
ce 删除到当前词尾或者下一个单词的词尾
cb 删除到当前词首或者前一个单词的词首
#command 多次命令操作
cc 删除当前行并输入新内容
#cc 多行操作
C 删除当前光标到行尾,并切换成插入模式




100icent [ESC] :粘贴 cent 100次


<start position><command><end position> 

  command:

    y复制,d删除,gU变大写,gu变小写

    例如 0y$ 命令:

    0 先到行头

    y 然后开始从这里开始拷贝

    $ 拷贝到本行地最后一个字符


  ye :从当前位置拷贝到本单词的最后一个字符




扩展模式

1,地址定界:

  • :start_pos,end_pos

  • # :具体行数

  • #,# :从左侧#表示行起始,到右侧#表示行结尾

  • #,+# :从左侧#表示的行起始,加上右侧#表示的行数

        :2,+3 表示2到5行

  • . :当前行

  • $ :最后一行

        .,$-1 :当前行到倒数第二行

  • % :全文,相当于1,$



2,/pat1/,/pat2/ 

    从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束

    #,/pat/ /pat/,$ 

使用方式:后跟一个编辑命令

 d    删除

 y    复制

 w file 将范围内的行另存至指定文件中

 r file 在指定位置插入指定文件中的所有内容


查找命令:

    /PATTERN :从当前光标所在处向文件尾部查找

    ?PATTERN :从当前光标所在处向文件尾部查找

    n: 与命令同方向

    N:与命令反方向


查找并替换:

    

s: 在扩展模式下完成查找替换操作 

格式:s/要查找的内容/替换为的内容/修饰符 

要查找的内容:可使用模式 

替换为的内容:不能使用模式,但可以使用\1, \2, ... 等后向引用符号;还可以使用“&”引用前面查找时查找到的整 个内容 

修饰符: 

i: 忽略大小写 

g: 全局替换;默认情况下,每一行只替换第一次出现 

gc:全局替换,每次替换前询问 

查找替换中的分隔符/可替换为其它字符,例如 s@/etc@/var@g   s#/boot#/#i


命令模式下的撤销更改

u :撤销最近的更改

#u :撤销之前多次更改

U :撤销光标落在这行后所有此行的更改

按Ctrl+r 重做最后的 "撤销" 更改

. :重复前一个操作

n. :重复前一个操作n次





vim的寄存器


有26个命名寄存器和1个无名寄存器,常存放不同的剪贴板内容,可以不同会话间共享。

用a,b,c,...z表示,用 "寄存器 表示,放在数字和命令之间,比如

    3"tyy :表示复制3行到t寄存器中

    "tp :表示将t寄存器内容粘贴

未指定,将使用无名寄存器

有10个数字寄存器,用0,1,...9表示,0表示存放最近复制内容,1存放最近删除内容。当新的文本变更和删除时,1转存到2,2转存到3,依次类推,数字寄存器不能在不同会话间共享。


vim也可以编辑二进制文件

可以使用 vim -b binaryfile 以二进制方式打开文件

在扩展命令模式下,利用 xxd 命令转换为可读的十六进制 :%!xxd

在扩展命令模式下,利用 xxd 命令转换回二进制文件 :%!xxd -r

保存退出


vim也具有可视化模式

允许选择的文本块

    v :面向字符

    V :面向行

    Ctrl-v :面向块

可视化键可以与用于移动键结合使用:

    w,),(,}...等

突出显示的文字可以被删除,复制,变更,过滤,搜索,替换等


vim的多文件模式

vim FILE1 FILE2 FILE3 ...

:next 下一个

:prev 前一个

:first 第一个

:last 最后一个

:wall 保存所有

:qall 退出所有

:wqall 保存并退出所有


vim可以使用多个窗口进行更便捷的操作

多文件分割

  vim -o|-O FILE1 FILE2 ...

  -o :水平分割

  -O :垂直分割

  在窗口间切换:Ctrl+w ,Arrow

单文件窗口分割:

  Ctrl+w,s :split,水平分割

  Ctrl+w,v :vertical,垂直分割

  Ctrl+w,q :取消相邻窗口

  Ctrl+w,o :取消全部窗口

  :wqall :全部保存并退出





vim定制自己的工作特性

  全局:/etc/vimrc

  个人:~/.vimrc

扩展模式:只对当前vim进程有效

行号:

   显示:set number,简写为set nu

   取消显示:set nonumber,简写为set nonu

括号成对匹配

   匹配:set showmatch ,简写为 set sm

   取消匹配:set nosm

自动缩进

   启用:set ai

   禁用:set noai

高亮搜索

   启用:set hlsearch

   禁用:set nohlsearch

语法高亮

   启用:syntax on 

   禁用:syntax off 

忽略字符的大小写 

   启用:set ic 

   不忽略:set noic

文件格式 

   启用:fileformat=unix 

   不忽略: fileformat=dos 

设置文本宽度 

   :set textwidth=65 (vim only) 

   :set wrapmargin=15 

:help option-list 

:set or :set all





功能 启用 取消
行号 set number 或 set nu set nonumber 或 set nonu
括号成对匹配 set showmatch 或 set sm set nosm
自动缩进 set ai set noai
高亮搜索 set hlsearch set nohlsearch
语法高亮 syntax on syntax off
忽略字符的大小写 set ic set noic
文件格式 fileformat=nuix fileformat=dos
设置文本宽度 :set textwidth=65 :set wrapmargin=15



linux 强大的文本编辑器 vim