Skip to content

Latest commit

 

History

History
236 lines (147 loc) · 10.7 KB

vim使用.md

File metadata and controls

236 lines (147 loc) · 10.7 KB

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

    • 常用的命令有

      :q				# 退出(如果修改了文本将不能执行)
      :q!				# 强制退出(如果修改了文本将不会保存)
      :wq				# 保存并退出
      :w				# 保存不退出
  • 可视模式:在正常模式中按下v(字符文本),V(行文本),Ctrl+q(windows下块文本), Ctrl+v(Linux下块文本),进入可视模式

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

      image-20210429214300852

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

      image-20210429214451121

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

      image-20210429214546492

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中,同时文本也会被放入未命名寄存器中。

"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寄存器的内容。