Skip to content

vim_base

遇见王斌 edited this page Nov 1, 2018 · 1 revision

Vim 原生的功能

1.切换模式

                            +-------------+
                            |shell 提示符 |
                            +--+----------+
                       退出 vi |     | 启动 vi
                            +--------+----+
                            |  一般模式   |
                            +-------------+
                           /               \
                          /                 \
                文本插入 / Esc键       自动  \ :
                        /                     \
                       /                       \
          +--------------+                    +-------------+
          |   插入模式   |                    |  命令行模式 |
          +--------------+                    +-------------+

i → Insert 模式,在光标前插入

ESC → 回到 Normal 模式,Normal 模式下,所有键都是功能键

:help <command> → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(退出帮助需要输入:q)

2.存盘 & 退出

:e file → 打开一个文件

:w → 存盘

:saveas file → 另存为

:xZZ:wq → 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)

:q! → 退出不保存

:qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。

:bn:bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(:n到下一个文件)

3.插入

a → 在光标后插入

o → 在当前行后插入一个新行

O → 在当前行前插入一个新行

cw → 替换从光标所在位置后到一个单词结尾的字符

4.删除

x → 删当前光标所在的一个字符。

dd → 删除当前行,并把删除的行存到剪贴板里

d → 删除,常用于组合

5.拷贝 & 粘贴

yy → 拷贝当前行当行于 ddP

p → 粘贴(小写后)

P → 粘贴(大写前)

y → 拷贝,常用于组合

vim有12个粘贴板,分别是0 1 2 ... 9 a " +:reg命令可以查看各个粘贴板里的内容,在vim中简单用y只是复制到"粘贴板里,同样用p粘贴的也是这个粘贴板里的内容。

  • "Ny 指定N粘贴板复制(主意引号)

  • + 粘贴板是系统粘贴板,"+y复制,"+p粘贴

6.定位

hjkl (←↓↑→)

6.1 行内定位

0 → 数字零,到行头

^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)

$ → 到本行行尾

g_ → 到本行最后一个不是blank字符的位置。

fa → 到本行下一个为a的字符处

Fa → 到本行上一个为a的字符处

ta → 到a前的第一个字符

Ta → 到a后的第一个字符

6.2 行间定位

NG → 到第 N 行 (命令中的G是大写的)

:N → 到第 N

gg → 到第一行。(相当于1G,或 :1)

G → 到最后一行。

6.3 全文定位

w → 到下一个单词的开头。(默认单词形式)

e → 到当前单词的结尾。(默认单词形式)

W → 到下一个单词的开头。(包含空格?

E → 到当前单词的结尾。(包含空格?

% → 到匹配的括号处,包括 ( { [ (需要把光标先移到括号上)

* → 到下一个匹配单词

# → 到上一个匹配单词

/pattern → 搜索 pattern 的字符串(需要回车,如果搜索出多个匹配,可按n键到下一个)

7.Undo & Redo

u → undo

<Ctrl-r>→ redo

8.重复

. → (小数点) 可以重复上一次的命令

N <command> → 重复某个命令N次,command可以为.

使用.时,若上一次的命令为N <command>,则原样执行N <command>

使用N <command>时,若command.,则N会覆盖.自带的次数

9.组合

  • <start><command><end>

例如

0y$ → 从行头拷贝到行尾

ye → 从当前位置拷贝到本单词的最后一个字符

y2/foo → 拷贝2个foo之间的内容

10.区域选择

<action>Na<object> 包括object

<action>Ni<object> 不包括object

  • action 可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。

  • object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落;也可以是成对出现的字符:" ' ) } ]

  • N 表示选取第N层,不写默认为1

11.自动提示

<Ctrl-n><Ctrl-p>

12.可视化选择

v 可视

V 可视行

<Ctrl-v> 可视块

选择了可视化范围后,可做如下操作:

  • J → 把所有的行连接起来(变成一行)

  • < → 左缩进

  • > → 右缩进

  • = → 自动缩进

在所有被选择的行后加上点东西:

<Ctrl-v>

选中行

$ 到行最后(不加将在每行行首编辑)

A 块操作中进入插入模式

输入

ESC

13.分屏

split → 创建分屏

vsplit → 创建垂直分屏

<Ctrl-w>方向 → 方向可以是 hjkl 或 ←↓↑→,用来切换分屏。

<Ctrl-w>_ → 最大化尺寸

<Ctrl-w>| → 垂直分屏最大化尺寸

<Ctrl-w>+ → 增加尺寸

<Ctrl-w>- → 减小尺寸


其他

帮助文档 → :help usr_02.txt

vim 技巧

  • % 跳转到配对的括号(小括号,方括号,大括号都在次范围),一般用于查看if,while的范围
  • 多行注释: vim多行注释,ctrl+v,选好行以后I(大写很重要),然后//,然后两次ESC
  • 格式对齐: vim一样可以把混乱的格式排列整齐,只要输入"gg=G" 这个是直接在 normal模式按的, gg=G , 不是 :gg=G
  • 缩进:

    和<< >>和c++的输入输出流用的符号一样,这个缩进或者反缩进的量由shiftwidth控制,默认是8个空格. 一般来说,这个功能都会和v命令一起用,以实现整块缩进,当和v一起使用的时候,只需要>和<即可,也就是只输入一次

  • 搜索关键字:* 定位至当前光光标所指单词的下一次出现的地方,# 定位至当前光光标所指单词的上一次出现的地方,n 定位至跳至已被标记出的单词下一次出现的地方,shift+n 定位至跳至已被标记出的单词上一次出现的地方