[read]Vim实用技巧


=Start=

《Vim实用技巧》(Pratical Vim)这本书绝对值得一读!不管你是Vim的新手还是Vim的熟练用户(如果是绝顶高手那就算了……)。

在快速翻阅完本书之后,我的感受就像在豆瓣上看到的一则评论『看完发现,我从VIM入门级变成了门外汉级。。』。

其实我之前是不倾向于买这类介绍工具如何使用的书的,因为按我之前的经验,掌握常用工具20%的用法足以应对工作中80%的使用场景,没必要专门买一本这样的书来看;而且,这种书通常也不便宜。但在看了这本《Vim实用技巧》之后,我后悔了,后悔怎么没早点买这本书。这真的是一本难得的好书,买到就是赚到。

下面记录一下在看本书的过程中对我启发比较大的内容:


理想模式:用一键移动,另一键执行

在技巧 2 中,我们想在一系列行的结尾添加分号。我们先用 A;<Esc> 修改了第一行,做完这步准备后,就可以使用 . 命令对后续行重复此修改。我们使用了 j 命令在行间移动,要完成剩余的修改,只需简单地按足够多次 j. 就可以了。

在技巧 3 中,我们想为每个 + 号的前后各添加一个空格。我们先用 f+ 命令跳到目标字符上,然后用 s 命令把一个字符替换成 3 个,做完这步准备后,我们就可以按若干次 ;. 完成此任务。

在技巧 5 中,我们想把每处出现单词“content”的地方都替换成“copy”。我们使用 * 命令来查找目标单词,然后用 cw 命令修改第一处地方。做完这步准备后,就可以用 n 键跳到下一匹配项,然后用 . 键做相同的修改。要完成这项任务,只需简单地按足够多次 n. 就行了。


cwreplacement<ESC>

$ vim -u NONE -N
:help initialization

:h feature-list
:h +feature-list


在Vim的命令行中,符号%代表当前文件名(参见 :h cmdline-special),所以如果你正在写一个简单的Python/Shell脚本并且想执行看看效果的话,可以在Vim中执行下面的命令:

:!python %
:!bash %


在Vim中操作时,我们可以方便地调用shell命令:

:shell 启动一个shell(输入exit返回Vim)
:!{cmd} 在shell中执行{cmd}
:r !{cmd} 在shell中执行{cmd},并把命令的输出插入到光标下方
:1,3w !{cmd} 在shell中执行{cmd},并以当前文件的1-3行作为{cmd}命令的输入
:1,3 !{filter} 使用外部程序{filter}过滤当前文件的1-3行


重复

使用 . 命令重复上次的修改
使用 @: 命令重复上次的外部命令
使用 & 命令重复上次的:substitute命令
使用 ; 命令重复上次f命令所进行的查找

f{char}命令让Vim查找下一处指定字符出现的位置,’;’命令会重复上次f命令所查找的字符。


Vim中的复合命令以及等效的长命令

复合命令 等效的长命令
C c$
s cl
S ^c
I ^i
A $a
o A<CR>
O ko

在插入模式中移动光标会重置修改状态影响 . 命令

如果在插入模式中使用了<Up>、<Down>、<Left>或<Right>这些光标键,将会产生一个新的撤销块。你可以把这想象成先切换为普通模式,然后用h/j/k/l命令对光标进行了移动,唯一的区别就是:我们并没有退出插入模式。这时也会对 . 命令产生影响。


可重复的操作及如何回退

目的 操作 重复 回退
做出一个修改 {edit} . u
在行内查找下一指定字符 f{char}/t{char} ; ,
在行内查找上一指定字符 F{char}/T{char} ; ,
在文档中查找下一处匹配项 /pattern<CR> n N
在文档中查找上一处匹配项 ?pattern<CR> n N
执行替换 :s/target/replacement & u
执行一系列修改 qx{changes}q @x u

==

参考链接:
更多参考链接:

=EOF=

,

《 “[read]Vim实用技巧” 》 有 9 条评论

  1. Vim快速跳转`
    m[字符] 然后可以通过命令:反引号[字符] 快速跳转到该标记处
    g; 快速跳转到上次编辑的位置
    g, 返回前一个编辑历史所在的位置
    `
    一些Vim最佳命令`
    :earlier 2m 恢复到两分钟前的状态
    u 撤销最后一个命令
    Ctrl-r 重做
    `

  2. 如何在 Linux 上使用 Vundle 管理 Vim 插件
    https://linux.cn/article-9416-1.html
    `
    Vundle 安装
      下载 Vundle
      配置 Vundle
    使用 Vundle 管理 Vim 插件
      添加新的插件
      列出已安装的插件
      更新插件
      卸载插件
      资源
    `

  3. Vim同时操作多个文件的4个实用技巧整理
    https://vimjc.com/vim-work-with-multiple-files.html
    `
    一、Vim分割窗口
    如果已经打开了Vim,可以在命令行模式下使用 :vsp new_file.txt 来新打开一个垂直分割的窗口,或使用 :sp new_file.txt 命令新打开一个水平分割的窗口。

    二、使用Vim文件缓冲区
    Vim每打开一个文件就会创建一个对应的Vim文件缓冲区 (Vim file buffer)。Vim支持同时在多个缓冲区进行操作,缓冲区不仅包含了文件的内容,也记录了该文件的编辑状态等配置信息,包括激活、隐藏、上次编辑行数等。

    Vim命令行模式下的命令 :ls 和 :buffers 会列出所有被载入到内存中的缓冲区的列表,% 符号指明哪个缓冲区在当前窗口中可见。

    通过 :bnext (缩写形式 :bn) 和 :bprev (缩写形式 :bp)命令可正向或反向遍历列表,Vim组合命令 可以在当前文件和轮换文件间快速切换。

    三、Vim标签页
    Vim标签页(Vim 7引入的功能)是可以容纳一系列Vim窗口的容器,可通过Vim帮助命令 h: tabpage 查看官方为Vim标签页的介绍。

    Vim命令行命令 :tabs 可以列出所有的标签页和它们包含的窗口,当前窗口用 > 表示,修改过的缓冲区用 + 表示。

    Vim命令行模式下,使用命令 :tabnext (缩写形式 :tabn) 可以移动到下一个标签页;Vim普通模式下,使用命令 gt 同样可以移动到下一个标签页。

    四、Vim参数列表args
    Vim参数列表记录了在启动时作为参数传递给 Vim 的文件列表,在Vim命令行模式下执行 :args 命令可以打印出当前参数列表的内容,可以用 :next 及 :prev 命令遍历参数列表中的所有文件。

    vim args

    :argdo 命令可以在参数列表args中的每个文件上执行一条 Ex 命令(注意:不能是普通模式的命令)。:argdo 命令结合 :args 指定参数列表可以对任意个文件执行多种操作。
    `

发表回复

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