跳到主要内容

Vim 学习

前置知识

在 Vim 中大小写是一个相反的操作

在 Vim 中有 4 种编辑模式,分别是:普通模式、插入模式、可视模式和命令行模式。

复制粘贴相关 ⭐

首先删除一行:dd 5dd:删除当前行在内以下的5行。

撤回 u Ctrl+r 恢复上一步被撤销的操作

当我们在普通模式中按 v 的时候,会把当前光标为主作为选区的起点,然后我们可以通过 h/j/k/l/w/b 等进行光标的移动,确定选区的终点。

在选择了要操作的范围之后我们就可以使用 d 命令来进行删除。使用 d 命令进行操作的时候实际上进行的是我们熟悉的「剪切」操作,我们可以通过另外的一个命令 p 在普通模式下进行粘贴操作。

d 命令类似的还有复制命令 y,我们可以通过 yy 来复制一行内容。同样的,也可以进入可视模式之后选定指定的内容进行复制,然后回到普通模式进行 p 粘贴操作。

x 是删除

粘贴二:先按下 insert 进入编辑模式,然后按 shift+insert 粘贴内容。

粘贴系统剪贴板

确认 vim 编辑器是否支持 clipboard 特性

vim --version| grep "clipboard"

支持这特性的检索结果应该包含 +clipboard,而不支持则会是 -clipboard

不支持的话就重新安装吧

sudo apt install vim-gtk

然后只需要将内容复制到剪切板寄存器(+)中即可,注意要加上 "+ ,其他程序便可以访问到了。

"+yy  // 复制当前行到剪切板
"+p // 将剪切板内容粘贴到光标后面
"ayy // 复制当前行到寄存器 a
"ap // 将寄存器 a 中的内容粘贴到光标后面

全选删除

  • 全部删除:按 esc 键后,先按 gg(到达顶部),然后 dG(删除到尾部)
  • 全部复制:按 esc 键后,先按 gg,然后 ggyG
  • 全选高亮显示:按 esc 键后,先按 gg,然后 ggvG 或者 ggVG
  • 单行复制:按 esc 键后,然后 yy
  • 单行删除:按 esc 键后,然后 dd
  • 粘贴:按 esc 键后,然后 p

粘贴时保持格式

在命令模式中使用 :set paste 后就可以粘贴了,然后退出 粘贴模式 命令模式输入 :set nopaste

范围操作

  • d<范围> - 删除一定范围内的文本
  • c<范围> - 删除一定范围内的文本并进入插入模式
  • y<范围> - 将范围内的文本放入0号和"号注册栏
  • v<范围> - 选择范围内的文本
  • ><范围> - 将范围中的内容缩进一格
  • <<范围> - 将范围中的内容取消缩进一格

一般这些操作搭配可视化模式一起使用

# 注意是大小写
v - 进入字符选择模式, V - 进入行选择模式, Ctrl+v - 进入块选择模式。

进入可视化模式后移动光标即可选中文本。过程中可按 o 键令光标在选区两端切换。

下面这些好像不行,待学习

  • =<范围> - 自动缩进范围内的文本
  • gU<范围> - 将范围内的字符转换为大写
  • gu<范围> - 将范围内的字符转换为小写

批量修改内容

Vim 下多行同时编辑与删除技巧

问题:在Vim内同时对多行增加或删除相同的内容,如:

item 1
item 2
item 3

变成(增加):

my_item 1
my_item 2
my_item 3

再变成(删除):

tem 1
tem 2
tem 3

编辑操作:

  • 将光标移到要插入相同内容的第一行第一个字符上,如上面代码中 item 1 中的 i 上
  • 按下 ctrl+v 进入 visual block 模式
  • 按两次 j 或者 2j,将光标移动到要插入的最后一样,如上面代码中 item 3 中的 i 上
  • 按下 I(大写 i)进入编辑模式
  • 开始输入要插入的内容,如 my_ (虽然这里只修改了一行,但是按 esc 之后就会自动把其它几行也同样操作)
  • 按 esc 退出(非常重要,不要忘记了),Vim 会自动在这几行前面添加相同的内容,可能需要一些运行时间。

删除操作:

  • 将光标移到要删除相同内容的第一行第一个字符上,如代码中 my_item 1 中的 m 上
  • 按下 ctrl+v 进入 visual block 模式
  • 使用 motion 选中想要删除的所有内容,在本问题中,按两次 j 和两次 l
  • 按下 d,同时删除所有选中的字符

光标移动

0 到行头 ^ 到本行最后一个非blank字符的位置 $ 到本行行尾 /字符串 搜索/后面的字符串(如果有多个则回车后按n则转到下一个) ctrl+f 向下移动一页 ctrl+b 向上移动一页 + 移动到下一行(注意+是要按shift按出来的,不然是=) - 移动到上一行 n<space> n表示移动的字符,输入数字后按空格会向右移动n个字符 G 移动到最后一行 gg 移动到第一行 nG 移动到第n行 n 向下移动n行

移动光标的方法效果
h 或 向左方向键(←)光标向左移动一个字符
j 或 向下方向键(↓)光标向下移动一个字符
k 或 向上方向键(↑)光标向上移动一个字符
l 或 向右方向键(→)光标向右移动一个字符

常用的范围指令有:

  • shift + [] 是以代码块为单位跳转
  • h/j/k/l:分别代表着向左,下,上,右的方向移动
  • ^/$:跳到行首/行尾
  • w/b:跳到下一个单词头/跳到上一个单词头
  • f{char}/F{char}:跳到下一个字符为 char 的位置/跳到上一个字符为 char 的位置
  • gg - 从光标位置到文件开头
  • G - 从光标位置到文件结尾
  • / 正则表达式 - 从光标位置到下一个匹配正则表达式的位置(跨行)
  • ? 正则表达式 - 从光标位置到上一个匹配正则表达式的位置(跨行)

命令模式

以下操作要先输入:

打开&保存&退出&改变文件

e 文件路径 打开一个文件 例如 e ./test.java w 存盘 saveas 文件路径(注意还要加上文件名) 另存为 例如:saveas ./temp/test.java wq 保存退出 q! 退出不保存 注意强行退出后会产生一个 .filename.swp 文件,如果原文件没有丢失则直接删除这个文件才能正常打开

rm .filename.swp

bn 切换下一个文件 bp 切换上一个文件

:set nu 显示行号

配置环境

安装中文文档

wget http://nchc.dl.sourceforge.net/sourceforge/vimcdoc/vimcdoc-2.3.0.tar.gz
tar -zxvf vimcdoc-2.3.0.tar.gz
cd vimcdoc-2.3.0/

## 它会自动安装
./vimcdoc.sh -i

修改光标

使用以下命令同时启用光标行和光标列,将显示“十字架”光标,可以准确定位当前位置:

:set cursorline cursorcolumn

修改配置文件

vim ~/.vimrc

在文件里就可以添加命令了

$ vim ~/.vimrc
"这个文件的双引号 (") 是注解
set hlsearch "高亮度反白
set backspace=2 "可随时用倒退键删除
set autoindent "自动缩排
set ruler "可显示最后一列的状态
set showmode "左下角那一列的状态
set nu "可以在每一列的最前面显示行号啦!
set bg=dark "显示不同的底色色调
syntax on "进行语法检验,颜色显示。

Reference