Linux基础入门 --9 DAY

文本处理工具之神vim

        vi和vim简介

一、vi编辑器

vi是Unix及类Unix系统(如Linux)下最基本的文本编辑器,全称为“visual interface”,即视觉界面。尽管其名称中包含“visual”,但vi编辑器实际上工作在字符模式下,并不提供图形界面。vi编辑器以其强大的功能和灵活性著称,是Linux系统中不可或缺的工具之一。

vi编辑器具有三种主要的工作模式:

  1. 命令模式(Command Mode):启动vi后默认进入此模式。在此模式下,用户可以通过键盘输入各种命令来控制光标的移动、文本的复制、粘贴、删除等操作。
  2. 插入模式(Insert Mode):在命令模式下,通过输入特定的命令(如ia等)可以进入插入模式。在插入模式下,用户可以输入文本内容。
  3. 底行模式(Last Line Mode):在命令模式下,通过输入冒号(:)可以进入底行模式。在底行模式下,用户可以执行一些高级命令,如保存文件、退出vi、查找文本等。

二、vim编辑器

vim是vi的一个升级版,全称为“VI IMproved”。vim在vi的基础上增加了许多新的特性和功能,如语法高亮、代码折叠、多窗口编辑等,使得文本编辑工作更加高效和便捷。vim同样支持Unix及类Unix系统,并且由于其强大的功能和灵活性,被广大程序员和Linux用户所喜爱。

vim也保留了vi编辑器的三种工作模式,但在每种模式下都增加了更多的命令和特性。例如,在插入模式下,vim支持多种插入方式(如行首插入、行尾插入等);在底行模式下,vim支持更多的高级命令和选项。

三、vi与vim的区别

尽管vi和vim在功能和用法上非常相似,但vim在vi的基础上进行了大量的改进和扩展。主要区别包括:

  1. 语法高亮:vim支持语法高亮,可以根据不同的编程语言为代码中的关键字、注释等部分标注不同的颜色,极大地提高了代码的可读性。
  2. 代码折叠:vim支持代码折叠功能,可以将代码块折叠起来,只显示标题行或折叠标记,方便用户快速浏览和定位代码。
  3. 多窗口编辑:vim支持多窗口编辑功能,可以在一个vim实例中同时打开多个文件窗口进行编辑。
  4. 插件系统:vim拥有强大的插件系统,用户可以通过安装插件来扩展vim的功能和特性。

综上所述,vi和vim都是Unix及类Unix系统下非常优秀的文本编辑器。vim作为vi的升级版,在功能和特性上更加丰富和强大,是Linux系统中不可或缺的文本编辑工具之一。

        vim命令格式 

vim [OPTION]... FILE...

        +# 打开文件后,让光标处于第#行的行首,+默认行尾

        +/PATTERN 让光标处于第一个被PATTERN匹配到的行行首

        -b file 二进制方式打开文件

        -d file1 file2 ... 比较多个文件,相当于vimdiff

        -m file 只读打开文件

        -e file 直接进入ex模式,相当于执行ex file

说明:

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

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

三种主要模式和转换 

        命令模式->插入模式

        i insert,光标所在处输入

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

        a 在光标所在处的后面输入

        A 在光标所在处的行尾输入

        o 在光标所在处的下方打开一个新行

        O 在光标所在处的上方打开一个新行

        插入模式---ESC--->命令模式

        命令模式--->:--->扩展命令模式

        扩展命令模式--->ESC,enter--->命令模式

扩展命令模式 

        按:进入Ex模式,创建一个命令提示符:处于底部的屏幕左侧

        扩展名改了模式基本命令

        w        写(存)如磁盘 

        wq        写入并退出

        x        吸入并退出

        X        加密

        q        退出

        q!        不存盘退出

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

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

        !command        执行命令

        r!command        读入命令的输出

        地址定界

        格式:

:start_pos,end_pos cmd

#  具体第#行,例如2表示2行

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

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

.  当前行

$  最后一行

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

%  全文,相当于1,$

/pattern/   从当前行向下查找,知道匹配pattern的第一行,即:正则表达式

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

#,/pat/  从指定行开始,一直找到第一个匹配pattern的行结束

/pat/,$  向下找到第一个匹配pattern的行到整个文件的结尾行

        地址定界后跟的一个编辑命令

d        删除

y        复制

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

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

        查找并替换 

        格式:

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

        要查找的内容:可正则表达式模式

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

修饰符:

        i  忽略大小写

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

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

        说明:查找替换中的分隔符/可替换为其它字符,如:#,@

        范例:

s@/etc/var@g

s#/boot#/#i

        范例:cp

[root@localhost ~]# cp passwd{,.bak}
[root@localhost ~]# ls
anaconda-ks.cfg  original-ks.cfg  passwd  passwd.bak 

        定制vim的工作特性 

        配置文件:永久有效

        全局:/etc/vimrc

        个人:~/.vimrc

        扩展命令模式:当前vim进程有效

        行号

        显示:set number,简写 set nu

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

        忽略字符的大小写

        启用:set ignorecase,简写 set ic

        不忽略:se noai

        自动缩进

        启用:set autoindent,简写 set ai

        取消:set noai

        复制保留格式

        启用:set paste

        禁用:set nopaste

        显示Tab和换行符^|和$显示

        启用:set list

        禁用:set nolist

        高亮搜索

        启用:set hlsearch

        禁用:set nohlsearch

        语法高亮

        启用:syntax on

        禁用:syntax off

        文件格式

        启用widows文件格式:set fileformat=dos

        启用unix文件格式:set fileformat=unix

        简写:set ff =dos|unix

        设置文本宽度

        set texwidth=65(vim only)

        set wrapmargin=15

        设置光标所在行的标识

        启用:set cursorline,简写set cul

        禁用:set nocursorline

        加密

        启用:set key=passwd

        禁用:set key=

        了解更多

        set 帮助

        :help option-list

        :set or  :set all

命令模式

Vim的命令模式(Normal Mode)是其核心模式,提供了丰富的文本操作功能。以下是对Vim命令模式详细用法的归纳:

一、光标移动

  • 基本移动
    • h:向左移动光标一个字符。
    • l:向右移动光标一个字符。
    • j:向下移动光标一行。
    • k:向上移动光标一行。
  • 按单词移动
    • w:向前移动到下一个单词的开头。
    • e:向前移动到下一个单词的末尾。
    • b:向后移动到上一个单词的开头。
    • WEB(大写):忽略标点符号,按更大的“单词”单位移动。
  • 行内跳转
    • 0(数字零):跳转到当前行的行首。
    • ^:跳转到当前行首的第一个非空白字符。
    • $:跳转到当前行的行尾。
  • 行间跳转
    • gg:跳转到文件的第一行。
    • G:跳转到文件的最后一行。
    • #G(#为数字):跳转到文件的第#行。
  • 屏幕移动
    • Ctrl+f:向下翻一屏。
    • Ctrl+b:向上翻一屏。
    • Ctrl+d:向下翻半屏。
    • Ctrl+u:向上翻半屏。
    • H:跳转到当前屏幕的第一行。
    • M:跳转到当前屏幕的中间行。
    • L:跳转到当前屏幕的最后一行。

二、文本操作

  • 删除
    • x:删除光标所在位置的一个字符。
    • #x(#为数字):删除光标所在位置及之后的#个字符。
    • X:删除光标所在位置的前一个字符(相当于Shift+x)。
    • dd:删除光标所在的整行。
    • #dd(#为数字):删除从光标所在行开始的#行。
    • dw:删除从光标开始到单词末尾的字符。
    • d0:删除从光标位置到行首的内容。
    • d$:删除从光标位置到行尾的内容。
  • 复制
    • yy:复制光标所在的整行。
    • #yy(#为数字):复制从光标所在行开始的#行。
    • yw:复制从光标开始到单词末尾的字符。
  • 粘贴
    • p:将已复制或剪切的内容粘贴到光标所在行的下一行。
    • P(大写):将已复制或剪切的内容粘贴到光标所在行的上一行。
  • 撤销与重做
    • u:撤销上一次的操作。
    • Ctrl+r:重做被撤销的操作。

三、文本查找与替换

  • 查找文本(通过命令行模式实现):
    • 按下/?进入查找模式。
    • 输入要查找的文本,按Enter键。
    • 使用n查找下一个匹配项,N查找上一个匹配项。
  • 替换文本(通过命令行模式实现):
    • 按下:进入命令行模式。
    • 输入替换命令,如:s/old/new/g表示将当前行中所有的old替换为new
    • 使用%s/old/new/g表示在整个文件中替换所有的oldnew

四、其他常用命令

  • %:在匹配括号之间跳转(需要Vim正确识别括号)。
  • .:重复上一次的编辑命令。
  • Ctrl+o:跳转到上一个光标位置(在跳转历史中后退)。
  • Ctrl+i:跳转到下一个光标位置(在跳转历史中前进)。

五、文本选择(可视化模式)

虽然可视化模式(Visual Mode)不是命令模式的直接功能,但它是基于命令模式的一个扩展,用于选择文本。

  • 进入可视化模式:
    • v进入字符选择模式。
    • V进入行选择模式。
    • Ctrl+v进入块选择模式。
  • 在可视化模式下,可以使用方向键选择文本,然后使用y复制或d删除选定的文本。

掌握Vim命令模式的详细用法,可以大大提高文本编辑的效率和准确性

可视化模式 

Vim的可视化模式(Visual Mode)是一种非常强大的文本选择功能,它允许用户通过键盘操作来选择文本块,然后对该文本块执行复制、删除、替换等操作。Vim提供了三种可视化模式:字符选择模式、行选择模式和块选择模式。以下是这三种模式的详细解释:

1. 字符选择模式

  • 进入方式:在命令模式下,按小写v键进入。
  • 功能:该模式下,用户可以通过移动光标来选择字符。选中的文本区域由光标经过的所有字符组成,但光标所在字符不包含在选区中。
  • 操作:使用hjkl方向键或其他光标移动命令来选择文本。选中的文本区域由两个端点(左上角和右下角)来标识。默认情况下,移动光标会控制右下角端点的位置。可以使用o键在左上角和右下角之间切换活动端点。

2. 行选择模式

  • 进入方式:在命令模式下,按大写V键(或Shift+v,具体取决于Vim的配置)进入。
  • 功能:该模式下,用户可以通过移动光标来选择整行文本。选中的文本区域由光标经过的所有行组成。
  • 操作:与字符选择模式类似,使用hjkl方向键或其他光标移动命令来选择文本行。但在此模式下,光标移动会整行整行地选择文本。

3. 块选择模式

  • 进入方式:在命令模式下,按Ctrl+v键进入。
  • 功能:该模式下,用户可以选择一个矩形区域的文本。选中的文本区域由光标起始位置和移动光标形成的矩形框表示。
  • 操作:使用hjkl方向键来选择矩形区域。在块选择模式下,可以非常方便地选择表格中的列或进行列编辑。

通用操作

  • 复制:在可视化模式下,按y键将选中的文本复制到剪贴板。
  • 删除:在可视化模式下,按d键删除选中的文本。
  • 粘贴:在任何模式下,按p键将剪贴板中的内容粘贴到光标之后,按P(大写)键将内容粘贴到光标之前。
  • 切换选区:在可视化模式下,可以使用o键在选区的两个端点之间切换,以便调整选区的位置。
  • 重复操作:在可视化模式下执行的操作(如复制、删除等)会被记录下来,之后可以使用.(点命令)重复执行上一次的操作。
注意事项
  • 在可视化模式下,光标所在位置并不包含在选区中。
  • 在可视化模式下,可以使用普通模式下的光标移动命令来选择文本。
  • 使用gv命令可以重新选择上次可视化模式下选中的文本区域(如果文本未被删除或移动)。

Vim的可视化模式极大地提高了文本编辑的灵活性和效率,是Vim用户必须掌握的一项功能。

多文件模式 

Vim的多文件模式是其功能强大的一部分,允许用户同时打开、编辑和切换多个文件。以下是对Vim多文件模式的详细解析:

一、打开多个文件

  1. 启动时打开
    • 在终端中,可以直接使用vim命令后跟多个文件名来同时打开这些文件。例如,vim file1 file2 file3会同时打开这三个文件,但默认只显示第一个文件的内容。
  2. 已启动后打开
    • 在Vim已经启动的情况下,可以通过在命令模式下输入:e 文件名或简写为:open 文件名(部分Vim版本可能不支持:open,更常用的是:e)来打开新的文件。
    • 使用:files命令可以列出当前Vim实例中打开的所有文件及其缓冲区编号。

二、文件间切换

  1. 使用快捷键
    • Ctrl+6:在最近两个文件间切换。
    • :bn(buffer next的缩写):切换到下一个文件。
    • :bp(buffer previous的缩写):切换到上一个文件。
    • :n:N也分别用于切换到下一个和上一个文件,但它们的行为可能与:bn:bp略有不同,具体取决于Vim的配置和版本。
  2. 通过缓冲区列表切换
    • 使用:ls:buffers命令可以列出所有打开的缓冲区(即文件)及其编号。然后,可以通过:b 缓冲区编号:b 文件名来切换到指定编号或名称的文件。

三、同时显示多个文件

  1. 分屏显示
    • Vim支持水平分屏(:split或简写为:sp)和垂直分屏(:vsplit或简写为:vsp)来同时显示多个文件的内容。
    • 分屏后,可以使用Ctrl+w加方向键(如hjkl)来在不同的窗口间切换。
  2. 标签页
    • Vim还提供了标签页功能,允许用户在不同的标签页中打开多个文件。使用:tabe 文件名可以在新标签页中打开指定文件,使用:tabnext:tabprev等命令可以在标签页间切换。

四、关闭文件

  • 在命令模式下,可以使用:bd(buffer delete的缩写)来关闭当前缓冲区(即文件),但通常不会退出Vim。
  • 要关闭所有打开的文件并退出Vim,可以使用:qa(quit all的缩写)命令。

五、其他注意事项

  • 在进行文件切换或编辑时,建议先保存当前文件的更改,以避免数据丢失。
  • Vim的多文件模式非常灵活,用户可以通过配置文件(如.vimrc)和插件来进一步定制和增强其功能。
  • Vim的命令行模式(按Shift + :进入)提供了丰富的命令和选项,用于管理和操作多个文件,包括但不限于打开、关闭、切换、保存等。

综上所述,Vim的多文件模式为用户提供了高效、灵活的方式来同时处理多个文件,是Vim作为文本编辑器强大功能的重要组成部分。

多窗口模式 

Vim的多窗口模式是其功能强大的一部分,允许用户同时打开、编辑和查看多个文件或文件的不同部分。以下是对Vim多窗口模式的详细解析:

一、打开多窗口

  1. 启动时打开
    • 在终端中,可以使用vim命令结合特定的选项和文件名来在启动时打开多个窗口。例如,vim -o file1 file2会以水平分割的方式打开file1和file2,而vim -O file1 file2则会以垂直分割的方式打开它们。
  2. 已启动后打开
    • 在Vim已经启动的情况下,可以通过在命令模式下输入特定的命令来打开新的窗口。例如,:split(或简写为:sp)用于在当前窗口下方水平分割出一个新窗口,:vsplit(或简写为:vsp)则用于在当前窗口右侧垂直分割出一个新窗口。这两个命令都可以接受一个文件名作为参数,以在新窗口中打开指定的文件;如果不指定文件名,则会在新窗口中打开当前文件的另一个视图。

二、窗口间切换

  • 在Vim的多窗口模式下,可以使用Ctrl+w加上方向键(hjkl)来在不同的窗口间切换。其中,h表示向左切换,j表示向下切换,k表示向上切换,l表示向右切换。
  • 另外,Ctrl+w t可以将当前窗口切换到顶部窗口,Ctrl+w b可以将当前窗口切换到底部窗口。
  • 还有一些其他的快捷键组合可以用于窗口切换,如Ctrl+w p切换到上一个光标所在的窗口,Ctrl+w w依次轮询切换窗口等。

三、窗口大小调整

  • Vim允许用户根据需要调整窗口的大小。在命令模式下,可以使用:resize(或简写为:res)命令后跟一个数字来指定当前窗口的新高度(行数)。例如,:res 10会将当前窗口的高度调整为10行。
  • 对于垂直分割的窗口,可以使用:vertical resize(或简写为:vertical res)命令来调整窗口的宽度(列数)。
  • Vim还提供了增量式调整窗口大小的命令,如:resize+(增加当前窗口高度),:resize-(减少当前窗口高度),:vertical resize+(增加当前窗口宽度),:vertical resize-(减少当前窗口宽度)等。

四、关闭窗口

  • 在Vim中,可以使用:close(或简写为:cl)命令来关闭当前窗口。但是,如果只有一个窗口是打开的,那么:close命令将不会执行任何操作,因为Vim至少需要一个窗口来显示内容。
  • 要关闭所有窗口并退出Vim,可以使用:qa(quit all的缩写)命令。这个命令会保存所有已修改的文件(如果设置了自动保存或用户明确执行了保存操作),然后退出Vim。

五、其他注意事项

  • 在Vim的多窗口模式下,所有打开的窗口都共享同一个Vim实例,因此它们之间的操作(如复制、粘贴)可以相互影响。
  • Vim的多窗口模式非常灵活,用户可以通过配置文件(如.vimrc)和插件来进一步定制和增强其功能。
  • 在使用Vim的多窗口模式时,建议熟悉并掌握其快捷键和命令,以提高编辑效率。

VIM寄存器 

Vim的寄存器是一个可自定义的多重剪切板,它允许用户存储、查看、复制和粘贴文本内容,从而提高编辑效率。Vim中共有九类寄存器,它们各自具有不同的特性和用途。以下是Vim寄存器的详细解析:

1. 无名(unnamed)寄存器:""

  • 功能:缓存最后一次操作的内容。这是Vim默认的寄存器,当执行复制(yank)或删除(delete)操作时,如果没有指定其他寄存器,内容将被存储到无名寄存器中。
  • 使用:通过p命令粘贴时,默认使用的是无名寄存器中的内容。

2. 数字(numbered)寄存器:"0~"9

  • 功能:缓存最近的操作内容,但复制与删除操作有所区别。"0"寄存器缓存最近一次复制的内容,"1"~"9"寄存器缓存最近9次删除的内容。
  • 使用:如果要粘贴特定数字寄存器中的内容,可以使用"p(例如,"2p粘贴第二次删除的内容)。

3. 行内删除(small delete)寄存器:"-"

  • 功能:缓存行内删除的内容。如果删除的文本不含换行符(即不足一整行),则文本会被送到这个寄存器。
  • 使用:这个寄存器通常与xd2h等命令一起使用,用于处理行内的文本删除。

4. 具名(named)寄存器:"a~"z 或 "A~"Z

  • 功能:用户指定的寄存器,可以存储和访问特定的文本内容。
  • 使用:在复制或删除命令前加上寄存器的名称(例如,"ayy复制当前行到"a"寄存器),然后使用"p(例如,"ap粘贴"a"寄存器中的内容)来粘贴。大写字母表示追加内容到寄存器,小写字母表示覆盖原有内容。

5. 只读(read-only)寄存器:":", ".", "%", "#"

  • 功能:分别缓存最近命令、最近插入的文本、当前文件名和当前交替文件名。
  • 使用:这些寄存器主要用于特定的场景,如查看最近插入的文本或当前文件名。

6. 表达式(expression)寄存器:"="

  • 功能:只读,用于执行表达式命令。
  • 使用:可以通过在寄存器名前加上=来执行Vim的表达式功能,但通常不直接用于文本内容的存储和粘贴。

7. 选择及拖拽(selection and drop)寄存器:"*", "+", "~"

  • 功能:存取GUI选择文本,可用于与外部应用交互。
  • 使用:在GUI模式下,这些寄存器对应于系统剪贴板的内容。通过"*yy"+yy等命令可以将文本复制到系统剪贴板,通过"*p"+p等命令可以将系统剪贴板的内容粘贴到Vim中。

8. 黑洞(black hole)寄存器:"_"

  • 功能:不缓存操作内容(干净删除)。
  • 使用:使用这个寄存器进行删除或复制的内容都会被丢弃,类似于Linux中的/dev/null文件。这可以用于避免删除或复制操作影响默认寄存器的内容。

9. 模式寄存器(last search pattern):"/"

  • 功能:缓存最近的搜索模式。
  • 使用:这个寄存器用于保存上一次搜索所使用的正则表达式或文本模式,可以在后续的搜索和替换命令中使用。

查看寄存器内容

Vim提供了:reg命令来查看所有寄存器的内容,也可以通过:reg 来查看特定寄存器的内容。

总结

Vim的寄存器是一个功能强大的特性,它允许用户以灵活的方式存储、查看和粘贴文本内容。通过熟练使用寄存器,可以大大提高Vim的编辑效率。

标记和宏 

Vim 中的标记(marks)和宏(macros)是两个不同的功能,但它们都能帮助用户提高编辑效率。下面分别解释这两个概念及其在 Vim 中的应用。

标记(Marks)

Vim 的标记是一种在文件中设置和跳转到特定位置的方法。每个标记都有一个名称(通常是一个单字母),你可以使用这个名称来快速返回到文件中你之前标记过的位置。

设置标记
  • 使用 m 命令来设置一个标记,其中  是你想要分配给该位置的标记名称(必须是单个字母,大写或小写)。例如,ma 会在当前位置设置一个名为 'a' 的标记。
跳转到标记
  • 使用 ' 命令(单引号加标记名称)来跳转到之前设置的标记位置。例如,'a 会跳转到之前用 ma 设置的标记位置。
  • 如果你想跳转到标记所在行的行首,可以使用 ```` 命令(反引号加标记名称)。
注意事项
  • 标记是全局的,即它们在整个 Vim 会话中都是有效的,直到你关闭 Vim。
  • 当你退出 Vim 并重新打开时,标记会丢失,除非你将它们保存在 viminfo 文件中(Vim 的默认行为)。

宏(Macros)

Vim 的宏允许你录制一系列的按键操作,并将它们保存为一个可重用的命令。这对于执行重复的任务非常有用。

录制宏
  • 首先,将光标移动到你想要开始录制宏的位置。
  • 按下 q 键进入录制模式,然后紧接着输入一个寄存器名称(通常是小写字母)来指定宏将被保存在哪个寄存器中。例如,qa 会开始录制宏并将其保存在寄存器 'a' 中。
  • 执行你想要录制的操作。例如,移动光标、删除文本、插入文本等。
  • 按下 q 键停止录制。
播放宏
  • 将光标移动到你想要执行宏的位置。
  • 按下 @ 键,然后输入你之前用来录制宏的寄存器名称(例如,@a 会播放保存在寄存器 'a' 中的宏)。
  • 你可以通过重复按下 @ 来多次执行宏。
注意事项
  • 宏是 Vim 中非常强大的功能,但也需要谨慎使用,因为它们会执行录制的所有操作,包括任何可能的错误操作。
  • 宏可以嵌套使用,即你可以在录制宏的过程中再次进入录制模式来录制另一个宏。
  • 宏可以被保存到文件中,并在需要时通过 Vim 脚本或其他方式加载和执行。

通过使用 Vim 的标记和宏,你可以显著提高编辑效率和准确性,尤其是在处理重复性或模式化的编辑任务时。

编辑二进制文件 

#以二进制的方式打开文件

vim -b binaryfile

#扩展命令模式下,利用xxd命令转换为可读的16进制

:%!xxd

#插入模式下编辑二进制工具

#扩展命令模式下,利用xxd命令转换二进制

:%!xxd -r

#保存退出

帮助 

:help

:help topic

vimtutor

        

 

         

        

 

        

         

       

        

         

       

你可能感兴趣的:(Linux学习,linux,运维,服务器)