Vim 使用笔记(快捷键)

Vim 设置相关问题

Vim 中和 IDEA 中的 Shift + Enter 快捷键相当的操作是什么?

Esc 回到 NORMAL 模式,然后按小写的 o,这样就会在当前行下面插入一行,并且光标会来到下一行的开头,模式会自动切换到 INSERT 模式。

如果是按大写的 O,那么,就会在当前行的上一行插入新的一行,然后光标来到上一行的开头,模式自动切换到 INSERT 模式。

如何设置 Vim 大括号自动补全并且换行对齐?

首先,要有以下的配置:

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

按:这个配置是用来设置智能缩进的。

然后,添加映射:

imap { {}<ESC>i<CR><ESC>V<O

按:这个自动补全似乎不是一个好主意。之后还是被我取消掉了。

这个主要是为了写 C 语言时候用。

如何设置 Vim 显示行号?

添加如下配置:

set number

Vim 有关 C 语言缩进相关的问题?

set number
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set cindent
set smartindent
set clipboard^=unnamed,unnamedplus
source $VIMRUNTIME/vimrc_example.vim
set nobackup
set noundofile

对于设置的解释:

  • tabstop=X # 一个 TAB 字符占 X 个空格,C/C++、python 都建议设置为 4,下同
  • softtabstop=X # 前面有 X 个空格时,再按下一次 tab,这 X 个空格就会和上一个 X 个空格组合成一个制表符,也就是方便退格
  • shiftwidth=X # 每行缩进 X 个空格
  • autoindent # 自动缩进
  • cindent # C 语言风格的缩进
  • smartindent # 智能缩进,每行都和前一行的缩进量相同,还能识别花括号,遇到 { 则取消缩进。
  • expandtab # expandtab 是把输入的tab转换成空格

设置字符编码相关?

set fileencoding=utf-8
set encoding=utf-8
set termencoding=utf-8

Windows 的 Vim 使其不要创建多余的文件?消除 ~.un~ 后缀文件生成的操作?

set nobackup
set noundofile

Vim 快捷键相关问题

基本操作?

  • ESC:从当前模式转换到 NORMAL 模式;
  • i:从 NORMAL 模式转到 INSERT 模式;
  • ::命令行模式。Vim 希望你输入类似于保存该文档命令的地方。

方向键

光标向左移动一个字符?

h

光标向下移动一行?

jCtrl + J

光标向上移动一行?

kCtrl + P

光标向右移动一个字符?

l

按:是英文字母 l

移动光标至本行开头?

0

按:是数字 0

移动光标到本行末尾?

$

移动光标至本行第一个非空字符处?

^

向右移动一个词?

w

按:上一个字母和数字组成的词之后。

向右移动一个词?

W

按:以空格分隔的词。

向右移动 5 个词?

5w

向左移动一个词?

b

按:下一个字母和数字组成的词之后。

向左移动一个词?

B

按:以空格分隔的词。

向左移动 5 个词?

5b

移动至文件末尾?

G

移动至文件开头?

gg

设置缓冲区使当前行居中?

zz。

删除文本

删除光标处字符?

x

删除一个词?

dw:从光标当前的位置开始删除,直到删除到单词的最后。

daw:删除光标所在的一个单词。delete a word。

caw:删除光标所在的一个单词,并且模式转成 INSERT 模式。

  • 如果该单词是在一段文字的中间部分,即,前面也有单词,后面也有单词,此时,此命令在删除单词的同时,会将此单词后面的空格连带着删除,但是不删除前面的空格。
  • 如果该单词是最后一个单词,并且后面紧跟着半角句号,那么,此命令会连带着删除原单词前面的空格。
  • 如果如果该单词是最后一个单词,并且后面没有标点符号,那么,此命令不会删除原单词前面的空格。

bdw:这是一个复合命令。b 可以让光标退回到单词开头的位置,而 dw 上面描述过的命令。

删除光标前面的单词。

在 NORMAL 模式下,键入 Ctrl + W

这个和在 bash 以及 PowerShell 中删除一个单词的方法是一样的。

删除至行首?

d0

删除至行末?

d$

删除至句末?

d)

按:啥叫句末?

删至文件开头?

dgg

删除至文件末尾?

dG

删除当前行?

dd

删除 3 行?

3dd

剪切、复制

剪切某一行?

dd。

如何全选复制?

按 ESC 键后,先按 gg,然后按 yG

按:gg 是让光标回到文件开头,yG 是从当前行复制到文件结尾。

复制一个单词?

yaw:复制光标所在处的单词。

yw:和 dw 类似,只是,这个是复制。从光标所在处复制,直到复制到单词的最后。

更多见:vim 的复制粘贴

翻页

翻到下一页?

在 vim 中翻页,同样可以使用 PageUp 和 PageDown,不过,这会使手指移出主键盘区。

所以,可以使用 Ctrl + BCtrl + F 来进行翻页,它们的功能等同于 PageUp 和 PageDown。

Ctrl + BCtrl + F 前也可以加数字,来表示向上或向下翻多少页。

向下翻一行?向上翻一行?

  • 向下:Ctrl + E
  • 向上:Ctrl + Y

搜索

In Vim, you can find and replace text using the :substitute (:s) command.

搜索一个单词?

/ 然后输入要搜索的单词

更多内容,见:

Some Tricks

%s/./&/g

按:& 表示匹配到的内容。这个命令执行完之后,文本不会发生任何变化,但是会有一个 Side Effect,即我们会得到当前这个文本的字符数量。

其他

如何判断 Vim 是否剪切板?

在 Shell 输入

$ vim --version | grep clipboard

如果输出包含 +clipboard 就表示支持,如果是 -clipboard 就表示不支持。

如果不支持,Ubuntu 可以先卸载原来的 Vim,然后安装 vim-gtk。

Window 下的 Git Bash 如何配置 Vim?

C:\Program Files\Git\etc 目录下找到 vimrc 文件,然后使用 VSCode 打开进行配置(需要管理员权限)。


参考:

1、缩进相关


Vim 使用笔记(快捷键)
http://fanyfull.github.io/2021/11/05/Vim-使用笔记/
作者
Fany Full
发布于
2021年11月5日
许可协议