Vim常用指令整理

Vim指令整理

1. 基本指令

1.1 系统命令

  • :q quit (close window)
  • :w save (“write”)
  • :wq save and quit
  • :e {name of file} open file for editing
  • :ls show open buffers
  • :help {topic} open help
    • :help :w opens help for the :w command
    • :help w opens help for the w movement

1.2 移动命令

1.2.1 光标的基本移动

命令 解释
h,j,k,l 左,下,上,右
H 把光标移到屏幕最顶端一行
M 把光标移到屏幕中间一行
L 把光标移到屏幕最底端一行
+或Enter 把光标移至下一行第一个非空白字符
- 把光标移至上一行第一个非空白字符
w 光标停在下一个单词开头
W 移动到下一个单词开头,但忽略一些标点
e 光标停在下一个单词末尾
E 移动到下一个单词末尾,如果词尾有标点,则移动到标点
b 光标停在上一个单词开头
B 移动到上一个单词开头,忽略一些标点
ge 光标停在上一个单词末尾
( 前移1句
) 后移1句
{ 前移1段
} 后移1段
0 移动到行首
$ 移动到行尾
gg 到文件头部
G 到文件尾部
v visual模式
shift+v 选择一行
ctrl+v 选择一块,在win中可能会冲突,以ctrl+q代替,或者ctrl+alt+v

1.2.2 翻屏

命令 解释
ctrl+f 下翻一屏
ctrl+b 上翻一屏
ctrl+d 下翻半屏
ctrl+u 上翻半屏
ctrl+e 向下滚动一行
ctrl+y 向上滚动一行
zz 将当前行移动到屏幕中央
zt 将当前行移动到屏幕顶端
zb 将当前行移动到屏幕底端

1.3 复制粘贴

1.3.1 基本命令

命令 解释
yy或Y 复制游标所在行整行。
2yy或y2y 复制两行。请举一反三
y^ 复制至行首,或y0。不含游标所在处字元。
y$ 复制至行尾。含游标所在处字元。
yw 复制一个word。
y2w 复制两个字(单词)。
yG 复制至档尾。
y1G 复制至档首。
p 小写p代表贴至游标后(下)。
20p 粘贴20次
P 大写P代表贴至游标前(上)。
yy+p 复制当前行到下一行
yy+P 复制当前行到上一行

1.3.2 复制到系统剪贴板

  • 选择全文

    gg shift+V shift + G 
    
  • 复制到系统剪贴板

    "+y 复制到系统剪切板
    "+p 把系统粘贴板里的内容粘贴到vim
    
        解释:"+y是把选中内容复制到系统剪切板。
    

    要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号,如上所述,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p将系统全局粘贴板里的内容粘贴进来。

  • 查看剪贴板

    VIM具有多个剪切板,":reg"命令查看各剪切板。系统剪切板的编号就是"+

  • 将Vim默认剪贴板设为系统剪贴板

    set clipboard=unnamedplus
    

1.4 插入文本

命令 解释
i 在光标前插入
I 在当前行第一个非空字符前插入
a 在光标后插入
A 在当前行最后插入
o 在下面新建一行插入
O 在上面新建一行插入
ci( 删除并修改()中的内容
da( 删除(),以及其中的内容

1.5 切换标签页

  1. vim打开多个文件
    vim file1 file2 … filen
  2. vim已经启动
    :e file
  3. 同时显示多个文件
    :sp 水平切分窗口
    :vsplit 垂直切分窗口

不同tab页面切换

  1. 文件间切换
    ctrl+6: 两个文件间来回切换
    :bn 下一个文件
    :bp 上一个文件
    :ls 列出当前目录下的文件,带有编号,可通过编号切换
    :b1~n切换至第n个文件
  2. 在窗口间切换
    ctrl+w+方向键
    ctrl+w+h/j/k/l
    ctrl+ww依次切换至下一个窗口

vim7后tab切换

:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
标准模式下:
gt , gT 可以直接在tab之间切换。
更多可以查看帮助 :help table , help -p
不过用gt,gT来一个个切换有点不方便, 如果用:tabnext {count}, 又按键太多. 加入以下代码后, 可以用 alt+n来切换,
比如alt+1切换到第一个tab,alt+2切换到第二个tab。
把以下代码加到vimrc, 或者存为.vim文件,再放到plugin目。
:nn 1gt
:nn 2gt
:nn 3gt
:nn 4gt
:nn 5gt
:nn 6gt
:nn 7gt
:nn 8gt
:nn 9gt
:nn :tablast

2. 进阶指令

2.1 查找与替换

2.1.1 查找

  • 在 normal 模式下按下 / 即可进入查找模式,输入要查找的字符串并按下回车。 Vim 会跳转到第一个匹配。按下 n 查找下一个,按下 N 查找上一个。

  • Vim 查找支持正则表达式,例如 /vim$ 匹配行尾的 "vim"。 需要查找特殊字符需要转义,例如 /vim\$ 匹配 "vim$"

  • 在查找模式中加入 \c 表示大小写不敏感查找,\C 表示大小写敏感查找。例如:

    /foo\c
    

    将会查找所有的 "foo", "FOO", "Foo" 等字符串。

  • 在 normal 模式下按下 * 即可查找光标所在单词(word), 要求每次出现的前后为空白字符或标点符号。例如当前为 foo, 可以匹配 foo bar 中的 foo,但不可匹配 foobar 中的 foo。 这在查找函数名、变量名时非常有用。

  • 按下 g* 即可查找光标所在单词的字符序列,每次出现前后字符无要求。 即 foo barfoobar 中的 foo 均可被匹配到。

2.1.2 查找并替换

:s(substitute)命令用来查找和替换字符串。语法如下:

:{作用范围}s/{目标}/{替换}/{替换标志}

例如 :%s/foo/bar/g 会在全局范围(%)查找 foo 并替换为 bar,所有出现都会被替换(g)。

作用范围

分为当前行、全文、选区等等。

当前行:

:s/foo/bar/g

全文:

:%s/foo/bar/g

选区,在 Visual 模式下选择区域后输入 :,Vim 即可自动补全为 :'<,'>

:'<,'>s/foo/bar/g

2-11 行:

:5,12s/foo/bar/g

当前行 . 与接下来两行 +2

:.,+2s/foo/bar/g

替换标志符

上文中命令结尾的 g 即是替换标志之一,表示全局 global 替换(即替换目标的所有出现)。 还有很多其他有用的替换标志:

空替换标志表示只替换从光标位置开始,目标的第一次出现:

:%s/foo/bar

i 表示大小写不敏感查找,I 表示大小写敏感:

:%s/foo/bar/i
# 等效于模式中的\c(不敏感)或\C(敏感)
:%s/foo\c/bar

c 表示需要确认,例如全局查找 "foo" 替换为 "bar" 并且需要确认:

:%s/foo/bar/gc

回车后 Vim 会将光标移动到每一次 "foo" 出现的位置,并提示

replace with bar (y/n/a/q/l/^E/^Y)?

按下 y 表示替换,n 表示不替换,a 表示替换所有,q 表示退出查找模式, l 表示替换当前位置并退出。^E^Y 是光标移动快捷键.

2.2 跳转

在Vim中,要跳转到指定的行数可以使用以下命令:

:<line-number>

其中 <line-number> 为行号。

例如,如果要跳转到第10行,则可以在命令模式下输入:

:10

然后按回车键即可跳转到第10行。如果要跳转到文件的最后一行,则可以使用以下命令:

:$

$ 符号表示最后一行,因此 :$ 命令会将光标移动到最后一行。

除了使用行号跳转,还可以使用相对行号跳转。例如,如果要向下移动5行,则可以在命令模式下输入:

:+5

如果要向上移动3行,则可以输入:

:-3

这样就可以快速地在Vim中跳转到指定的行数了。

2.3 快速生成和递增数字技巧

使用 put 和 range 快速生成数字

您可以通过以下方式快速生成升序数字

:put=range(1,5)

这会给你:

1
2
3
4
5

我们还可以控制增量。 如果我们想快速生成降序数,我们这样做:

:put=range(10,0,-1)

其他一些变化:

:put=range(0,10,2) // 从 0 到 10 递增 2
:put=range(5)      // 从0开始,上升到5

这个技巧可能有助于在做笔记时生成列表。 在vim中,显示当前行,我们可以使用line('.')。 这可以与 put/range 结合使用。假设您当前位于第40行。要生成第50行的数字,您需要执行以下操作:

:put=range(line(','),50)

于是你将得到的结果是:

40 // prints at line 41.
41
42
43
44
45
46
47
48
49
50

要调整上面的行号,将其更改为:put=range(line('.')+1,50)以显示正确的行号。

快速增加数字列

假设我们有一列数字,比如下面 HTML 中的 0:

<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>

如果我们想增加所有的零(1、2、3、...),我们可以很快做到。 方法如下:

首先,将光标移动到顶部 0(我使用 [] 表示光标位置)。

<div class="test">[0]</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>

使用 VISUAL BLOCK 模式 (<C-v>),向下移动 8 次 (<C-v>8j) 以直观地选择全部 0。

<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>

现在键入g <C-a>

<div class="test">1</div>
<div class="test">2</div>
<div class="test">3</div>
<div class="test">4</div>
<div class="test">5</div>
<div class="test">6</div>
<div class="test">7</div>
<div class="test">8</div>
<div class="test">9</div>

Vim 8 和 neovim 具有使用<C-a>自动递增数字(并使用<C-x>递减)的功能。 你可以通过:help CTRL-A来检查它。

我们还可以通过在前面插入一个数字来更改增量。 如果我们想要 10,20,30,... 而不是 1,2,3,...,请改为执行10g<C-a>

顺便说一句,使用<C-a><C-x>的超酷提示 - 您不仅可以递增数字,还可以递增八进制、十六进制、bin和alpha。

2.4 设置tab缩进为四个字符

:set tabstop=4

posted @ 2023-04-07 15:38  Xiao·Tong  阅读(106)  评论(2编辑  收藏  举报