Vim 点滴


Vim 点滴

今天正式开启Vim之旅

1.vim提供了两种使用模式:

  • a. “normal”模式,该模式可执行命令;
  • b. “insert”模式,该模式可编辑文本;

利用按键 “i/a/A” 进入编辑模式,利用按键 “ESC” 进入命令执行模式。

2.vim致力于最小化编辑动作所消耗的时间,强调键盘操作一切的理念。

“以vim的方式操作你的cursor”

一、内容查看

1. 移动光标

  1. 基本移动 — 上下左右移动(以character为单位)

    当然,vim中基本的cursor操作也使用键盘,具体方向键操作如下图所示:
    pic-1

  2. 整个word为单位移动

    • w:光标向前移动一个词
    • b:光标向后移动一个词
  3. 行首行尾移动
    • ^(或数字键0):移动到行首
    • $:移动到行尾
  4. 翻页
    • Ctrl + f (forward) = PageDown:向后翻页
    • Ctrl + b (back) = PageUp: 向前翻页
    • Ctrl + d (down): 向后翻半页
    • Ctrl + u (up):   向前翻半页
    • gg = Ctrl + Home:翻到文档首
    • G = Ctrl + End:  翻到文档尾
  5. 按行移动
    • 数字 + G:移动到数字所标识号的行
  6. 静态屏幕中移动(屏幕显示内容不变化,仅移动光标)
    • H:光标移动到当前屏幕的顶端
    • M:光标移动到当前屏幕的中间
    • L:光标移动到当前屏幕的底端
  7. 配对括号定位(编程中的常用键)
    • 光标移动到要配对的括号上,即“ (、[、{ ” 上,按 %
  8. 光标位置的跳转与回退

    vim 为光标的移动提供了极大的灵活性。除了提供了正常的上下左右移动,向前向后翻页等常规移动操作,还提供了如上述 5、 6、 7 这些特殊操作。前一种符合一般的操作逻辑,可视为 “顺序操作”;后一种则是 “跳转操作”。在 vim 中,”各种可以导致移动光标到当前行以外的操作” 都可视为跳转操作,这些操作既包括同一个文档内光标的跳转(如 5、 6、 7),也包括文档之间的跳转。这类虽不符合一般的顺序操作逻辑,却是 vim 光标快速移动力的真正核心。

    vim 使用 “跳转列表”来维持跳转位置,每个 vim 窗口都有一个单独的跳转列表。

    光标当前位置进行跳转操作后,跳转前的位置即加入跳转列表中。顺序操作与跳转操作混合使用,可是光标移动效率倍增。

    • : jumps:查看当前窗口的跳转列表
    • Ctrl + o:光标回退到跳转列表的上一个位置
    • Ctrl + i:与Ctrl + o 相反

    例如,光标在文档中间,需查看或编辑文件头/尾的内容,直接使用 ggG 操作(此时,光标位置加入跳转列表),完成文件头/尾操作后,使用 Ctrl + o,直接回到跳转前文档中间位置。

2.移动光标所在行

  • zt:将光标所在行移动至显示屏幕顶端(top)
  • zb:将光标所在行移动至显示屏幕底端(bottom)
  • zz:将光标所在行移动至显示屏幕中间
    • 这一功能对于查看和编辑均比较重要,可直接将位于当前屏幕显示底端的内容移至屏幕中央/顶端来进行查看

3.文档当前状态的显示

  • Ctrl + g

    光标处在文档的任意位置,都可以使用 Ctrl + g,则会显示光标所在位置在整个文档中的位置信息。包括行号、列号、该行在文档总行数中的位置占比(给出了本行在整个文档中的宏观定位)。

4.文档折叠

在 vim 中,可以基于文档中特定的“标签”对文档进行折叠,既可以全部折叠、也可以局部折叠。

  • “收” 操作
    • zc (close):小折叠。将与光标所在位置相同级别的文档内容“关闭”,折叠到上一级。
    • zC (CLOSE):大折叠。将整个文档内容“关闭”,折叠到顶层标签。
  • “放” 操作
    • zo (open):小展开。将光标所在折叠位置的文档内容“展开”,展开到下一级。
    • zO (OPEN):大展开。将光标所在折叠位置的下级所有文档内容全部“展开”。

这种操作可以让一个文档“大纲”视图与“细节”视图并存,非常适合对长篇幅、多层级结构的文档进行查看、编辑时使用。

二、内容修改

1. 添加操作

正常情况下,我们在“normal”模式中查看文档,这种设计可以阻止随意的修改,某种程度上保证了文档的安全。
当我们修改文档的内容时,首先要在文档中“确定”我们的编辑位置,即选定我们的插入点。选定插入点的方法有很多,
下面是几种比较常见的方法:

pic-2

  • i — 向前插入
    • 使用 i,在当前光标所在字符的前一个位置进行插入;
    • 使用 I,在当前光标所在行的行首位置进行插入;
  • a — 向后插入
    • 使用 a ,在当前光标所在字符的后一个位置进行插入;
    • 使用 A,在当前光标所在行的行尾进行插入;
  • o — 以行为单位插入
    • 使用 o,在当前光标所在行的下一行进行插入;
    • 使用 O,在当前光标所在行的上一行进行插入;

2. 删除操作

  1. x 操作

    在命令模式下,使用 x 删除光标所在位置的字符。

  2. d 操作 (delete)

    • 快捷操作:dd — 删除当前行
    • 一般操作:在命令模式下,使用模式:d + 操作对象
    “操作方法 + 操作对象” 是vim的典型操作方式,典型的操作对象有:
        w/b:代表单词
        ^:  移动到行首
        $:  移动到行尾
        G:  代表行
    
  3. c 操作 (change)
    • 快捷操作:C(大写字母c)– 删除光标当前位置至行尾的内容,vim进入编辑模式。该操作等价于 c + $
    • 一般操作:在命令模式下,使用模式:c + 操作对象

3. 复制粘贴

任何编辑器中,复制和粘贴都是重要操作,在vim中复制粘贴也十分方便。

  • 复制
    • 选定需复制的内容后(选择模式中/采用d操作),按 y 键 (yank 操作,即“拔”操作)
    • yy — 复制光标所在行
  • 粘贴

    选定需粘贴的位置后,直接按 p 键 (put 操作,即“放”操作)

4. 重复操作

  • . (小数点) — 重复前一个操作(与 word 中的 F4 功能类似!

    小数点操作可以说是 vim 中最为重要的操作。本质上讲,编辑工作有大量的重复性操作。而 vim 利用小数点操作对重复性操作进行了优化,利用好小数点操作,可以极大的提高编辑的效率,这个看似简单的命令可以说是 vim 中的瑞士军刀。

5. 格式缩进

  • = (等号) — 自动缩进并对齐 (与 eclipse 中的 Ctrl + Shift + f 功能类似!)

    • 选中文本,进行对齐

      gg(把关标定位到最上面),v(进入VISUAL模式),G(选中整篇文本),然后=

    • 未选中文本,进行对齐

      gg=G

  • >(大于)<(小于) — 手动缩进

    • 选中文本,进行缩进;缩进方向与箭头方向一致。

    两种缩进的比较:

    • >< 是原样整体缩进,不会改变原文本的既有缩进层次格式;
    • = 是智能整体缩进,会根据 vim 对格式的理解进行缩进,可能会改变原文本的既有缩进层次格式;

6. 快速保存退出

  • ZZ — 快速保存并退出vim

三、内容选择

内容区块选择是任何一个编辑器必须面临的问题,也是其他操作(如“复制 — 粘贴”)的前提和基础。

vim 为用户提供了“块选模式”,在块选模式中,可利用第一节“一、内容查看”中的操作进行移动光标,进行块选。

vim 提供三种方式块选择模式,不同的方式块选单位不同:

  • v (小写字母v) — 以字符为单位进行块选
  • V (大写字母V) — 以为单位进行块选
  • Ctrl + v — 以长方形的“块”为单位进行块选 (word中也有类似操作)

四、多窗口(多文件)操作

vim 提供了多窗口操作的功能。使用这种功能可以方便的在文件之间进行文本拷贝,数据转移。

1. 重叠窗口,打开多文件操作

1)重叠窗口打开

  • 在命令行使用
    > vim filename_1 filename_2 ……
  • 在vim编辑窗口内使用
    > : e filename

均可以在vim中同时打开多个文件进行操作,每个文件均占满vim的编辑窗口。

2)重叠窗口切换

  • 两文件之间快速切换
    • Ctrl + 6 或 ***: e#***
  • 多文件之间切换
    • : bn — vim编辑窗口切换到下一个文件
    • : bp — vim编辑窗口切换到上一个文件
      注:上述操作为通用切换操作,操作会闭环循环执行,即最后一个文件的“下一个”是第一个文件。
    • : n — vim编辑窗口切换到下一个文件
    • : N — vim编辑窗口切换到上一个文件
      注:上述操作为专用切换操作,只限于以 “ vim filename_1 filename_2 … ” 形式打开的多文件形式。

2. tab页窗口,打开多个文件

  • 打开新 tab 页
    • : tabnew — 打开一个新的tab页
    • : tabedit — 打开一个新的tab页
  • tab 页之间切换
    • : gt — 在tab页之间切换(向前切换tab页)
    • : gT — 在tab页之间切换(向后切换tab页)

3. 切割窗口,打开多文件操作

1)屏幕切割

在 vim 编辑窗口内,使用sp(split命令)

: sp filename

即可实现切割窗口操作,每个窗口内编辑一个独立的文件。

  • : sp
    则对同一个文件进行水平切割窗口操作。
  • : vsp
    对vim编辑窗口进行垂直切割操作。

2)切割窗口切换

  • Ctrl + w + j — 切换到下方的窗口
  • Ctrl + w + k — 切换到上方的窗口

4. 多窗口编辑的通用操作

: files: ls — 列出vim当前打开的所有文件

五、vim使用环境设置

1. 配置文件的部署(vimrc)

vim 使用配置文件来对使用环境进行设置。

由于 linux 的多用户特性,软件配置可分为 “通用配置 ”和“个性配置 ” 两大部分。软件的通用配置适合所有用户,一般在/etc文件夹下;而个性配置适用于单个用户,一般在用户的主文件夹下。

vim也不例外,通用配置在 “ /etc/vimrc “ 中,其中设置内容适合所有用户的vim环境;个性配置在 ” ~/.vimrc “ 中。

2. 配置选项的更改(set操作)

配置选项更改有两种方式:在 “ vim使用环境中直接更改 ” 与 “ 通过配置文件更改 ” 。

在vim使用环境中,通过 : set vim 参数 指令直接修改环境参数,属临时性修改;

通过配置文件修改,顾名思义,通过对配置文件进行修改来调整 vim 环境参数,属永久性修改。使用这种方式进行修改时,需先明确是做通用性修改,还是做个性化修改。找到对应的配置文件,直接修改即可。

常见的配置选项值如下:
: set all   --   显示当前所有的设置值
: set nu    --   显示行号
: set ruler --   显示标尺(编辑窗口最下方的状态栏,Ctrl + g 的当前文档状态信息即在标尺中显示)
: set tabstop=number     --   设置 tab 键跨越的字数
: set shiftwidth=number  --  设置每一级缩进的长度
: set enc=utf8 -- 设置编码字符集(用vim打开某些含中文的文件出现乱码时,设置此选项)
: set tabnew --  打开新的tab页

3. 历史操作的记录(viminfo)

vim 的 normal 模式,本质也是一种命令模式,用户在该模式下执行各种命令。

与 bash 类似,vim 对命令执行进行了追踪,对其历史操作也进行了记录,这些记录即存储在 viminfo 文件内;不同用户的操作各不相同,因此 viminfo 以隐藏文件的形式存储于各用户的主文件夹内。(打开 viminfo 即可看到其主要内容)

六、关于Vim的使用

随着使用 linux 的经验增多,遂愈加深切的感受到 vim 在 linux 中渗透之深。很多软件的编辑接口都会主动调用vi。比如,man(找男人)是linux下最为基本的索求帮助的操作,使用man查看帮助文件时,所用基本操控手段与用vim打开完全一致。不懂 vim,在linux下简直步履维艰!!!

参考材料:

  1. vim tutor
  2. 《鸟哥的私房菜》(第三版)
  3. a byte of vim
  4. Practical Vim, Drew Neil
  5. vim快捷键设计哲学,What is your most productive shortcut with Vim?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注