vim使用

发布时间 2024-01-02 20:57:34作者: monarch_bai

vim使用

1. 命令优化


- set tabstop=4:tab键设置为4个空格 
- set number:显示行号
- set cindent:设置c语言标准缩进方式
- set shiftwidth=4:设置缩进为4个空格



### 2. 模式切换

- 正常模式:启动vim后默认处于正常模式,无论处于什么模式,按下 Esc 就可以切换到正常模式
    - 在正常模式下可以使用 h (左移)、j (下行)、k (上行)、l (右移)来移动光标

- 插入模式:写入文本时使用

    ```bash
    # 在正常模式下输入
    i在光标之前,进入插入模式
    I在本行开头,进入插入模式
    a在光标之后,进入插入模式
    A在本行结尾,进入插入模式
    o在本行之后新增一行,并进入插入模式
    O在本行之前新增一行,并进入插入模式
    s删除当前字符,并进入插入模式
    S删除当前行中的所有文本,并进入插入模式
    ```

- 命令模式:在正常模式中按下:(英文冒号),会进入命令模式

    - 命令模式可以执行vim或插件提供的指令,如上述的 **命令优化** 指令可以在打开文本后进入命令模式执行,但是仅限于该文本

    - 常用的命令有

        ```bash
        :q				# 退出(如果修改了文本将不能执行)
        :q!				# 强制退出(如果修改了文本将不会保存)
        :wq				# 保存并退出
        :w				# 保存不退出
        ```

- 可视模式:在正常模式中按下v(字符文本),V(行文本),Ctrl+q(windows下块文本), Ctrl+v(Linux下块文本),进入可视模式

    - 字符文本:可以逐字符的选择文本,适用于选择一行中的字符

        ![image-20210429214300852](https://img2020.cnblogs.com/blog/2213660/202104/2213660-20210429214301156-1476263172.png) 

    - 行文本:逐行选择文本,适用于多行文本选择时

        ![image-20210429214451121](https://img2020.cnblogs.com/blog/2213660/202104/2213660-20210429214451182-1933402592.png) 

    - 块文本:按照块的方式选择文本,无视行的存在

        ![image-20210429214546492](https://img2020.cnblogs.com/blog/2213660/202104/2213660-20210429214546563-1739028460.png) 



### 3.快捷键

vim与其他编辑器不同的是,它不但采用同时按下多个键组合快捷键,而且还通过以不用的顺序按下多个键来组合成快捷键,且按键区分大小写,以下快捷键中同时按下的用 `+` 连接,否则即为按顺序按下

**==以下快捷键都需要在普通模式下使用==** 

| 作用               | 快捷键            |
| ------------------ | ----------------- |
| 撤回               | u                 |
| 回退               | Ctrl+r            |
| 整页向下翻页       | Ctrl+f (forward)  |
| 整页向上翻页       | Ctrl+b (backward) |
| 向下翻半页         | Ctrl+d (down)     |
| 向上翻半页         | Ctrl+u (up)       |

| 光标移动            |快捷键                   |
| ------------------ | ----------------- |
| 文本开头 | gg               |
| 文本结尾 | G                 |
| 向左 | h |
| 向下 | j |
| 向上 | k |
| 向右 | l |
| 一行的开头 | 0(数字0) 或  ^ |
| 一行的结尾 | $ |
| 跳到指定行 | 行号G 如:33G   跳到33行 |
| 下一个单词开头 | w(W表示只使用空格作为分隔,w前可以加数字,表示执行多少次w) |
| 下一个单词结尾 | e(E同上) |
| 上一个单词开头 | b(B同上) |
| 上一个单词结尾 | ge(gE同上) |
| 下一行开头 | Enter |
| 下一个括号 | % |
| 向左多个字符(可跨行) | 数字Backspace(退格键) |

- 复制:y   (将==可视模式==下选中的文本进行复制,下同)
- 剪切:d(不进入插入模式), c(进入插入模式)
- 粘贴:p

下面是一些常用的快捷复制方式(剪切格式与复制相同只不过把y变为d或c)

| 描述           | 快捷键                |
| -------------- | --------------------- |
| 单行复制       | yy                    |
| 复制到当前行头 | y^                    |
| 复制到当前行尾 | y$                    |
| 复制一个单词   | yw                    |
| 复制多个单词   | nyw 或 ywn  (n为数字) |
| 复制至文本尾部 | yG                    |
| 复制至第n行    | ynG  或 nyG           |

注:

- 在正则表达式中,^表示匹配字符串的开始位置,$表示匹配字符串的结束位置。
- 命令前面加数字表示重复的次数,加字母表示使用的缓冲区名称。如==5p==为==粘贴5次== 
- 使用英文句号 ==.== 可以重复上一个命令。



### 4.寄存器

> 参考链接:https://zhuanlan.zhihu.com/p/25332320

当你使用剪切复制等命令时,都可以指定寄存器将剪切复制的文本存放到寄存器中

#### 指定寄存器

在复制或删除文本时,可以使用"register命令将文本放入指定的寄存器中。例如以下命令,将复制一行文本`yy`放到寄存器*a*中,同时文本也会被放入未命名寄存器中。

```bash
"ayy

如果再使用相应的大写字母来指定寄存器,那么会将当前行内容追加到寄存器a中,这时该寄存器中就有了两行文本。

"Ayy

查看寄存器

在普通模式输入冒号 : 进入命令模式,然后输入 registers <寄存器名称> 可以查看指定寄存器

如果要查看所有寄存器内容,可以使用 registers

上述的 registers 可以简写为reg

image-20210505132409400

image-20210505132414650

寄存器分类

preview

  • 未命名寄存器(The Unnamed Register) 当使用y命令复制文本,或使用d、c、s、x等命令删除文本时,文本将自动被放入""未命名寄存器。即使你在复制或删除文本时,已经指定了寄存器(例如使用"xdd命令),这些文本也将同时被放入"x和""寄存器。

  • 数字寄存器(The Numbered Registers) "0包含最近复制的文本;"1包含了最近删除或者修改的文本。区别在于:"0不断被复制的文本所覆盖;而在删除文本时,如果指定了寄存器或者文本小于一行,那么"1将不会被覆盖。数字寄存器1-9可以看作是删除历史, 你可以从中找到早先删除的文本。比如使用了三次dd命令,那么这三行文本被分别存放在寄存器1,2,3中,可以通过命令"1P,"2P,"3P将这些文本再粘贴回来。

  • 行内删除寄存器(The Small Delete Register) 当删除文本少于一行时,内容将被放入"-寄存器,除非指定了其它寄存器

  • 命名寄存器(The Named Registers) 当文本被放入以小写字母命名的寄存器(例如"a)时,该寄存器原有的内容将被覆盖;而使用以大写字母命名的寄存器(例如"A)时,将会把文本追加到原有内容之后。

  • 只读寄存器(The Read-Only Registers) 你只能从只读寄存器中粘贴内容,而不能放入文本。"%包含当前文件名;".包含最近插入的文本;":包含最近执行的命令行。

  • 轮换文件寄存器(The Read-Only Registers) "#包含当前窗口轮换文件的名字。它影响CTRL-^的工作方式。

  • 表达式寄存器(The Expression Register) 可以进行表达式计算并返回结果。在常规模式下,输入"=,就会在Vim底部显示以“=”开始的提示行,可以在其中输入表达式并按回车键确认。随后使用命令p,可以将表达式的结果粘贴到文本中。例如在=提示符后输入“5*5”并按回车,然后输入命令p,就可以将计算结果“25”插入文本中了。在插入模式下,点击Ctrl-R=快捷键,也可以进入=提示行,输入表达式然后点击回车键,将计算结果插入到当前光标处。也就是说,不用离开插入模式,也无需额外执行粘贴命令,即可以完成表达式计算。在表达式寄存器中,不仅可以使用通常的算术运算符,还可以使用Vim特定的函数和运算符。例如通过表达式寄存器来得到环境变量的值(例如"=$HOME)。如果没有输入任何表达式而直接按回车键,那么Vim将执行最近使用过的表达式。

  • 选择和拖拽寄存器(The Selection and Drop Registers) 有3个寄存器用于保存选中的文本:在Mac和Windows下,"*"+,都用于访问系统剪切板;在Linux下,"+用于访问系统剪切板,而"*包含选中的文本。使用"+y命令,可以将当前选中的文文本复制到系统剪切板中。而"+p命令,则可以粘贴系统剪切板中的内容。通过剪切板寄存器,能够在不同的Vim编辑器或者是其他应用程序之间,进行文本交换"~包含上次从其它应用程序拖拽到Gvim中的文本。

  • 黑洞寄存器(The Black Hole Register) 任何放入"_中的文本都将不复存在。如果想要永久删除某些文本而不将其放入任何寄存器,那么可以使用黑洞寄存器。例如:命令dd将删除一行文本并将其放入寄存器"1中;而命令"_dd则将该行文本放入黑洞寄存器中,这些文本也就永久消失了,而寄存器"1中的文本会保持不变。

  • 搜索模式寄存器(Search Pattern Register) 当通过/命令进行搜索时,所使用的模式将被自动放入"/寄存器。

较为常用的就是"+"*系统寄存器

粘贴寄存器

命令:put会将寄存中的内容粘贴到指定的文本行后面。使用以下命令,可以将寄存器中的内容粘贴到第五行的后面:

:5put a

如果要将文本放在这一行的前面,可以用以下命令:

:5put! a

你也可以使用p命令,将x寄存中的文本粘贴到光标之后:

"xp

而P命令,则将x寄存中的文本粘贴到光标之前:

"xP

如果直接使用p或P命令,而没有指明特定寄存器,那么将粘贴未命名寄存器中的内容。

使用以下命令,可以粘贴上次插入的文本,方便你录入重复的内容:

".P

如果要粘贴系统剪切板中的内容,在插入模式下可以利用快捷键Shift+Ins,而在普通模式下,可以使用以下命令:

"*p
"+p

在插入模式下,点击CTRL+R然后输入寄存器的标识符,可以粘贴相应寄存器中的内容到当前位置。例如:

CTRL+R: 将粘贴最近执行的命令;

CTRL+R/ 将粘贴最近使用的搜索模式;

CTRL+R0 将粘贴"0寄存器的内容;

CTRL+Ra 将粘贴"a寄存器的内容。