Vim编辑器-03

一:vi/vim编辑器介绍

vi是 visual interface 的简称,是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑 ,类似于Windows中的记事本。Vim是vi的加强版本,兼容所有vi的命令,不仅能编辑文本,还具有shell程序的编辑功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。

安装Vim       

yum -y -install vim 

1.1工作模式

基本上 vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)

命令模式

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。

以下是普通模式常用的几个命令:

  • i -- 切换到输入模式,在光标当前位置开始输入文本。
  • x -- 删除当前光标所在处的字符。
  • : -- 切换到底线命令模式,以在最底一行输入命令。
  • a -- 进入插入模式,在光标下一个位置开始输入文本。
  • o:在当前行的下方插入一个新行,并进入插入模式。
  • O -- 在当前行的上方插入一个新行,并进入插入模式。
  • dd -- 剪切当前行。
  • yy -- 复制当前行。
  • p(小写) -- 粘贴剪贴板内容到光标下方。
  • P(大写)-- 粘贴剪贴板内容到光标上方。
  • u -- 撤销上一次操作。
  • Ctrl + r -- 重做上一次撤销的操作。
  • :w -- 保存文件。
  • :q -- 退出 Vim 编辑器。
  • :q! -- 强制退出Vim 编辑器,不保存修改。

若想要编辑文本,只需要启动 Vim,进入了命令模式,按下 i 切换到输入模式即可。

命令模式只有一些最基本的命令,因此仍要依靠底线命令行模式输入更多命令。

输入模式

在命令模式下按下 i 就进入了输入模式,使用 Esc 键可以返回到普通模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

底线命令模式

在命令模式下按下 :(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  • :w:保存文件。
  • :q:退出 Vim 编辑器。
  • :wq:保存文件并退出 Vim 编辑器。
  • :q!:强制退出Vim编辑器,不保存修改。

按 ESC 键可随时退出底线命令模式。

命令模式相当于一个中转站,即无论当前处于何种模式,都可通过按 Esc 键进入命令模式中,再根据所需继续完成后续操作。

简单的说,我们可以将这三个模式想成底下的图标来表示:

1.2编辑文件

命令格式

vi   文件路径

vim  文件路径

如果文件路径表示不存在,那么此命令用于编辑新文件

如果文件路径表示存在,那么此命令用于编辑已有文件

                         

1.3保存和退出

q     quit的缩写

底行命令作用
:w保存(只是对当前文件的一个保存,并未退出文件)
:q退出,注意:要先保存然后才能退出
:wq保存并退出
:q!  强制退出 (此时文件还未保存)

已有文件

一般情况下 ,编辑完文件后,使用:wq命令保存并退出

新文件:

如果已有文件名,在末行模式直接输入w保存,如果没文件名,输入w文件名 进行保存

                

另存为:

那么在vi中也可以另存为,也就是在保存之后,再使用w 另存文件名。

1.4 光标的移动

光标方向的移动,除了可以使用方向键,还可以使用以下命令 :

向上移动光标:k

向左移动光标:h

向右移动光标:l  

向下移动光标:j

1.5 翻页命令kk

Ctrl+F向前翻整页

Ctrl+B向后翻整页

Ctrl+U向前翻半页  

Ctrl+D向后翻半页

1.6 行内快数跳转

^移动到本行行首  

$移动到本行行尾

1.7 显示行号和取消行号(底行模式使用)

set nu显示行号  

set nonu取消行号

1.8 在命令模式下,使用以下命令可以快速的在行间跳转

gg跳转到文件首行  

G跳转到尾行  

G跳转到文件的#行

二:编辑操作

2.1:进入输入模式命令

  1. i 插入命令
    • 当你在普通模式(Normal Mode)下时,按下 i 键会进入插入模式(Insert Mode),允许你在光标所在位置开始插入文本。
  2. a 附加命令
    • 与 i 命令类似,但 a 命令会在光标当前位置的下一个字符处开始插入文本。如果光标位于行尾,则会在下一行开始插入。
  3. o 打开命令
    • 在普通模式下,o 命令会在光标所在行的下一行创建一个新行,并将光标置于新行的开始位置,进入插入模式。
  4. c 修改命令
    • c 命令用于删除文本并进入插入模式,允许你替换掉被删除的文本。你可以通过先指定一个范围(如 cw 删除一个单词,c$ 删除到行尾),然后按下 c 来实现。
  5. r 取代命令
    • 在普通模式下,r 命令允许你替换光标所在位置的单个字符。按下 r 后,输入你想要替换成的字符即可。
  6. s 替换命令
    • s 命令与 cl(change letter)命令相同,用于删除光标所在位置的字符并进入插入模式,允许你替换掉该字符。与 c 命令不同,s 仅作用于光标所在位置的单个字符。
  7. Esc 退出命令
    • 在插入模式或可视模式下,按下 Esc 键会退出当前模式,返回到普通模式。在普通模式下,你可以使用各种命令来移动光标、搜索文本、复制粘贴等。

 

2.2:输入模式的操作

  1. Home 光标到行首
    • 按下Home键会将光标移动到当前行的开头。
    • 在Vim中,没有直接的Home键映射,但你可以使用0(数字零)键来达到相同的效果,即将光标移动到当前行的第一个非空白字符上。如果你想要移动到包括空格和制表符在内的行首,可以使用^键。
  2. End 光标到行尾
    • 按下End键会将光标移动到当前行的末尾。
    • 在Vim中,你可以使用$键来达到这个效果,即将光标移动到当前行的最后一个字符上。
  3. Page Up和Page Down上下翻页
    • Page UpPage Down键用于向上或向下翻页。
    • 在Vim中,这些键也通常保留其原始功能,即Page Up向上翻页,Page Down向下翻页。但是,Vim也提供了其他导航命令,如Ctrl + b向上翻页(backward),Ctrl + f向下翻页(forward)。
  4. Delete删除光标位置的字符
    • Delete键(或标记为Del的键)用于删除光标所在位置的字符。
    • 在Vim的普通模式下,x命令用于删除光标所在位置的字符。如果你处于插入模式并希望删除字符,你需要先按Esc退出插入模式,然后使用x命令。不过,如果你已经习惯了其他编辑器的行为,并希望Vim在插入模式下也能通过Delete键删除字符,那么你可能需要查看你的Vim配置或系统设置,因为Vim本身并不直接拦截Delete键的默认行为。

2.3:删除操作(命令模式使用)

  1. x 删除光标处的单个字符
    • 在Vim的普通模式下,x 命令会删除光标所在位置的单个字符。如果想要连续删除多个字符,可以在按下 x 之前输入一个数字,比如 3x,这会删除光标右侧的三个字符。
  2. dd 删除光标所在行
    • 同样在Vim的普通模式下,dd 命令会删除光标所在的整行,并将该行保存在Vim的剪贴板中(也称为寄存器)。如果想要连续删除多行,可以在按下 dd 之前输入一个数字,比如 3dd,这会从当前行开始向下删除三行文本。
  3. dw 删除当前字符到单词尾包括空格的所有字符
    • dw 命令在Vim中用于删除从光标当前位置到当前单词末尾的所有字符,包括单词后面的空格(如果有的话)。Vim中的“单词”定义可能因配置而异,但通常包括字母、数字和下划线。请注意,如果光标已经在单词的末尾,dw 将不会删除任何内容,除非光标后面紧跟一个空格或标点符号,并且Vim的配置将其视为单词的一部分。
  4. x 例如 3x 删除光标处向右的三个字符
    • 如前所述,x 命令删除光标处的单个字符。通过在 x 之前输入一个数字(在这个例子中是 3),可以指示Vim连续执行该命令指定的次数。因此,3x 会删除光标右侧的三个字符。
  5. dd 例如 3dd 从当前行开始向下删除三行文本
    • 同样地,dd 命令删除光标所在的整行。通过在 dd 之前输入一个数字(在这个例子中是 3),可以指示Vim连续执行该命令指定的次数。因此,3dd 会从当前行开始向下删除三行文本。

2.4:撤销操作

u命令

  • 功能:撤销最近一次的操作。
  • 使用方法:在Vim的普通模式下(即非插入模式),按下u键即可撤销最近一次对文本的修改。如果需要撤销多次操作,可以连续按下u键,Vim会依次撤销之前的每一次修改。
  • 注意事项u命令只能撤销对文本的修改,无法撤销文件的保存、退出等操作。此外,撤销操作的范围受限于上一次保存文件时的状态。

U命令

  • 功能:撤销对当前行的所有修改。
  • 使用方法:在Vim的普通模式下,按下大写的U键将撤销对当前行的所有编辑操作,将该行恢复到上一次对该行进行编辑之前的状态。
  • 注意事项U命令与u命令不同,它作用于整行而非单个操作。此外,如果再次使用U命令,它会撤销之前U命令的撤销操作,即恢复到U命令之前的状态。

Ctrl+R命令

  • 功能:恢复对使用u命令撤销的操作。
  • 使用方法:在Vim的普通模式下,按下Ctrl+R组合键可以恢复最近一次使用u命令撤销的修改。如果需要恢复多次撤销操作,可以连续按下Ctrl+R键。
  • 注意事项Ctrl+R命令是对u命令的“撤销”操作,它允许用户恢复之前被撤销的修改。但是,如果在此期间进行了其他编辑操作或保存了文件,则恢复操作的范围可能会受到限制。

2.5:复制操作

  1. yy 命令
    • 功能:复制当前整行的内容到Vim的寄存器(剪贴板)。
    • 使用方法:在Vim的普通模式下,将光标置于想要复制的行的任意位置,然后按下 yy
    • 示例:5yy 会连续复制从当前行开始的5行文本到寄存器。
  2. yw 命令
    • 功能:复制从当前光标所在位置到单词尾(包括单词尾部的空格,如果光标不在单词的开头)的内容到Vim的寄存器。
    • 使用方法:在Vim的普通模式下,将光标置于单词的任意位置,然后按下 yw
    • 示例:2yw 会复制光标所在位置及其后面的两个单词(或单词的一部分,取决于光标位置和单词的边界)到寄存器。但请注意,这实际上是按单词数计算的,而不是精确地按“两个单词”这个量词,因为单词的边界由空格、标点符号等决定。
  3. y$ 命令
    • 功能:复制从光标所在位置到行尾的内容到Vim的寄存器。
    • 使用方法:在Vim的普通模式下,将光标置于行内的任意位置,然后按下 y$
  4. y^ 命令(注意:这里可能是y0的误写,因为^在Vim中通常用于表示行的第一个非空白字符,但复制整个行首到光标位置并不直接使用^):
    • 功能(基于y0的假设):复制从光标所在行的行首(第一个字符)到光标位置的内容到Vim的寄存器。但通常,如果我们想要复制行首到光标的内容,实际上可能会使用y0(复制到行首的第一个非空白字符)或y^(在某些配置或版本中可能表示相同的行为,但并非所有Vim实现都如此)。然而,更直接地复制整行或特定范围的文本到光标位置并不直接使用y^
    • 注意:如果您确实想要复制从行首到光标的内容,并且包括空白字符,可能需要考虑使用Visual模式(v进入,选择文本,y复制)或精确的命令组合。
  5. 在末行模式中使用范围进行复制
    • 功能:复制指定范围内的文本到Vim的寄存器。
    • 使用方法:在Vim的命令模式下(通常通过按:进入),输入复制命令和范围。例如,3,5y 会复制第3行到第5行(包括第3行和第5行)的内容到寄存器。
    • 注意:在命令模式下输入范围时,不要包含空格(即3,5y而不是3, 5y)。

2.6:替换和搜索

在vim/gvim的命令模式,按“/”或者“?”后面跟所要搜索的内容,然后按回车开启搜索:

/str
?str

进入搜索模式后,按“n”表示寻找下一个,按“N”(shift + n)表示寻找上一个。

2.6.1:模糊搜索

/\<world\>

2.6.2:忽略大小写的搜索

缺省条件下vim的搜索是case-sensitive(大小敏感的) ,可以用属性“\c”来告诉vim在搜索时忽略大小写、

/\<pattern\>\c

/ll\c

2.6.3:高亮搜索结果

:set hlsearch
:set nohlsearch

                  

2.6.4:替换

单个字符替换

  • r:按下 r 后,Vim 会等待您输入一个字符来替换光标当前所在位置的字符。输入完字符后,Vim 会自动回到普通模式。

替换模式

  • R:进入替换模式(Replace mode),此时您输入的任何字符都会替换光标所在位置的字符,并将光标移动到下一个位置继续等待替换,直到您按下 ESC 键退出替换模式。

恢复上一次操作

  • u:撤销(Undo)最近一次的操作。连续按下 u 可以撤销多次操作

查找与替换

在 Vim 中,可以使用 :s 命令来在当前行中查找并替换文本,或者使用 :%s 命令来在整个文件中查找并替换文本。

当前行替换

  • :s/原字符/新字符/g:这个命令会在当前行中查找所有“原字符”的实例,并将它们替换为“新字符”。g 标志表示全局替换(即替换行中的所有匹配项)。

全局替换

  • :%s/原字符/新字符/g:这个命令会在整个文件中查找所有“原字符”的实例,并将它们替换为“新字符”。同样,g 标志表示全局替换。

示例

假设想在整个文件中将所有的 "ll" 替换为 "xx",可以使用以下命令:

:%s/ll/xx/g

2.7:异常退出恢复文件

  1. 在使用Vim编辑器时,如果因为系统崩溃、程序异常或用户非正常退出等原因导致编辑的文件未能保存,Vim会生成一个以.swp为后缀的临时交换文件(swap file),这个文件包含了缓冲区中的未保存数据,可以用来恢复编辑的内容。以下是异常退出后恢复文件的步骤和注意事项:

恢复文件的步骤

  1. 检查.swp文件
    当尝试重新打开之前未正常关闭的文件时,Vim会检测到与该文件关联的.swp文件,并给出警告。

  2. 使用Vim的恢复模式
    要恢复文件,可以使用Vim的恢复模式(recovery mode)。在命令行中,使用-r参数加上文件名来启动Vim,例如:

    vim -r filename
  3. 这将以恢复模式打开Vim,并加载.swp文件中的内容。

  4. 检查和保存恢复的内容
    在恢复模式下,Vim会显示恢复的文件内容。你可以检查这些内容,确保它们是你想要恢复的。如果需要,可以将恢复的内容保存到一个新文件中(建议使用不同的文件名以避免覆盖原始文件),例如:

    :w newfilename

     

    然后退出Vim:

    :q
    
  5. 比较和合并文件
    如果需要将恢复的内容合并回原始文件,可以使用diff工具或其他文本比较工具来比较原始文件和恢复的文件,然后手动合并更改。

  6. 删除.swp文件
    在成功恢复并保存了所需的内容后,应该删除原始的.swp文件,以避免混淆或不必要的磁盘空间占用。可以使用命令行中的rm命令来删除它,例如:

    rm .filename.swp

注意事项

  1. 确保没有其他Vim实例正在编辑该文件
    在删除.swp文件之前,确保没有其他Vim实例正在编辑该文件,否则可能会导致数据丢失。

  2. 定期保存文件
    为了避免因异常退出而丢失数据,建议定期保存文件。在Vim中,可以使用:w命令来保存文件,或者使用:wq命令来保存并退出。

  3. 配置Vim以自动处理.swp文件
    可以在Vim的配置文件.vimrc中设置一些选项来自动处理.swp文件。例如,可以设置Vim在退出时自动删除无用的.swp文件,但这可能会关闭Vim的备份和交换文件功能,通常并不推荐这样做。

  4. 理解.swp文件的生成机制
    .swp文件是Vim在编辑文件时自动生成的,用于在异常情况下恢复未保存的数据。了解这一机制有助于更好地管理和恢复文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值