vim编辑器进阶学习(一)

[TOC]

缓冲区

如同一般编辑器都有的tab标签一样,vim也类似的功能叫buffer(缓冲区),可以通过:help buffer查看详细文档。

常用命令 描述
:ls[flags] 展示所有(指定flags的)buffer
:b[数字/文件名] 切换指定buffer
:sb[数字/文件名] 分割屏幕显示指定buffer
:bn 显示下一个buffer
:bp 显示前一个buffer
:bf 显示第一个buffer
:bl 显示最后一个buffer
:bd[数字] 删除指定buffer
:e[文件名] 编辑文件在新buffer中(当前文件必须保存)
:e![文件名] 强制编辑文件在新buffer中,没有保存文件将丢失
  • :ls命令标识符号(同一列上的符号不可能同时出现)

u列表外缓冲区 (只有使用 [!] 才能看到) |unlisted-buffer|
%当前窗口里的缓冲区
#用 “:e #” 或 CTRL-^ 可切换到的轮换缓冲区
a激活缓冲区: 已载入内存并且可见
h隐藏缓冲区: 已载入内存但是没有窗口显示它|hidden-buffer|
-不可更改的缓冲区,选项 ‘modifiable’ 被关闭。
=只读缓冲区
+已经更改的缓冲区
x有读错误的缓冲区

  • ls[flags] 可以是下面字符的组合,用来限制列出的缓冲区

    +修改过的缓冲区(常用)
    -‘modifiable’ 关闭的缓冲区
    =只读缓冲区
    a激活的缓冲区
    u列表外缓冲区 (覆盖 “!”)
    h隐藏缓冲区
    x有读入错误的缓冲区
    %当前缓冲区(常用)
    #轮换缓冲区

标签

一个标签页可以容纳多个buffer,可以通过切换标签页达到每个标签页做不同的工作。

常用命令 描述
:tabnew 在当前页之后打开带新窗口的标签页
:tabc[数字] 关闭当前(第几个)标签页,屏幕上只有一个标签页时无法关闭
:tabo 关闭其他标签页
:tabn[数字] 循环显示下一个标签页(转到下几个标签页,首个标签页编号是1)
:tabp[数字] 循环显示上一个标签页(转到下上个标签页,首个标签页编号是1)
:tabl 显示最后一个标签页
:tabm[数字] 显示指定的标签页
:tabs 显示所有标签页>代表当前窗口,+表示修改过的缓冲区
:tabf [文件名] 打开新的标签,并编辑指定文件,和:find命令类似(需要设置查找路径set path=.)

分屏

目录分屏

  • 把当前窗口上下分屏,并进行目录浏览:
    :He 在下边分屏浏览目录
    :He! 在上分屏浏览目录

  • 把当前窗口左右分屏,并进行目录浏览:
    Ve 在左边分屏间浏览目录
    Ve! 在右边分屏间浏览目录

同步滚屏(help scroll-binding)

在需要同步滚动的窗口输入:set scb命令,取消同步滚动输入:set noscb命令。默认情况,两窗口偏移量是从当前行开始,可以通过:syncbind命令强制同步偏移量。

调整窗口大小

命令 描述
:re[size] (+/-)[数字] 调整窗口高度为(加/减)指定行数
:vertical re[size] (+/-)[数字] 调整窗口宽度为(加/减)指定列数

快捷键映射

vim快捷键映射用于改变输入键的含义,:map命令查看所有映射。可以通过help map.txt查看完整文档。

映射模式

  • Normal Mode(普通模式)

    前缀n,表示普通模式下生效,也就是进入vim后的默认模式。

  • Visual Mode(可视化模式)

    前缀v,表示在可视模式下生效,也就是进入vim后按v键时的模式。

  • Insert Mode(插入模式)

    前缀i,表示在插入模式下生效,也就是进入vim后按i键时的模式。

  • Command-Line/Ex Mode(命令行模式)

    前缀c,表示在命令行模式下生效,也就是进入vim后按:键的模式。

  • Select Mode(选择模式)

    前缀s,表示选择模式下生效,也就是用鼠标拖选区域的时候的模式。gvim下常用的模式。

  • 普通、可视、选择和操作符等模式
    前缀<Space>,表示这几种模式下均生效。

  • 插入和命令行模式

    后缀!,表示在插入和命令行模式下生效。

  • 操作符等待模式

    前缀o,表示在操作符等待模式下生效,也就是在操作一个命令时的间隔时间段的模式,一般该模式非常短暂。比如,执行一个命令,此时操作符等待模式被激活,当执行时间较长时可以通过按终止该操作,返回到普通模式。

  • 非递归映射
    前缀nore,表示非递归映射。map映射默认都是递归映射,即如果键a被映射成了b,c又被映射成了a,那么c就被映射成了b。可与上述模式组合使用。

映射命令

:map {lhs} {rhs}
表示将{lhs}映射为{rhs},其中{rhs}可以递归映射。

:unmap {lhs}
表示解除映射

:mapclear
清除所有映射,危险操作,慎用!

{lhs}之前可能显示一个特殊字符:
  * 表示不可重映射
  & 表示脚本的局部映射可以被重映射
  @ 表示缓冲区的局部映射

特殊参数

特殊参数可以按任意顺序使用,但必须紧跟在命令后面,其它任何参数之前。

  • <buffer>

    如果命令后面第一个参数是<buffer>,表示映射将只局限于当前的缓冲区内,当绥中区被删除时,映射也会被删除。如:map <buffer> ,w /[.,;]<CR>

  • <nowait>

    定义局部于缓冲区的映射 “,” 时,可能有另一个全局映射也以 “,” 开始。此时需要键入另一个字符,Vim 才能知道是用 “,” 映射还是更长的那个字符。为了避免这个问题,使用 参数,这样映射一旦匹配就会被使用,Vim 不会等待更多字符的输入。但如果那些字符已经输入了,还是会使用的。

  • <silent>

    定义一个映射时不在命令行上回显该映射。

  • <unique>

    定义新的键映射或者缩写命令的同时检查是否该键已经被映射,如果该映射或者缩写已经存在,则该命令会失败。

  • <Leader>和mapleader变量

    mapleader变量对所有map映射命令起效,它的作用是将参数替换成mapleader变量的值。如:
    :map <Leader>A oanother line<Esc>
    如果mapleader变量没有设置,则用默认的反斜杠代替,因此这个映射等效于:
    :map \A oanother line<Esc>
    如果设置了mapleader变量,如:
    let mapleader = ","
    那么就等效于:
    :map ,A oanother line<Esc>

特殊键符

符号 描述
<k0> - <k9> 小键盘 0 到 9
<S-…> Shift+键
<C-…> Control+键
<M-…> Alt+键 或 meta+键
<A-…> 同 <M-…>
<Esc> Escape 键
<Up> 光标上移键
<Space> 插入空格
<Tab> 插入Tab
<CR> 等于<Enter>

插件

会话(mysession.vim)

文件操作

1
2
:file 显示当前文件名
:file [name] 设置或修改当前文件名

其他资料