=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 |
==
参考链接:
- https://pragprog.com/titles/dnvim/source_code
- http://www.ituring.com.cn/book/1416
- http://www.ituring.com.cn/minibook/10668
- https://book.douban.com/subject/25869486/
更多参考链接:
- http://easwy.com/blog/archives/practical-vim-chinese-version/ #中文译者的blog,同时在他的blog中你可找到很多关于Vim的使用技巧的文章
- https://www.ibm.com/developerworks/cn/linux/l-tip-vim1/
- http://wyw.dcweb.cn/vim/VimArticle.pdf
- http://hackll.com/2015/04/12/20-vim-tips/
- http://linux.chinaunix.net/techdoc/desktop/2009/07/06/1122020.shtml
- http://darksun.blog.51cto.com/3874064/1548082
=EOF=
《 “[read]Vim实用技巧” 》 有 9 条评论
Vim快速跳转`
m[字符] 然后可以通过命令:反引号[字符] 快速跳转到该标记处
g; 快速跳转到上次编辑的位置
g, 返回前一个编辑历史所在的位置
`
一些Vim最佳命令`
:earlier 2m 恢复到两分钟前的状态
u 撤销最后一个命令
Ctrl-r 重做
`
一些参考链接:
https://hackaday.com/2016/08/08/editor-wars-the-revenge-of-vim/
http://toutiao.com/a6322423873547632897/
http://www.cnblogs.com/jiqingwu/archive/2012/06/14/vim_notes.html
Vundle 是 Vim bundle 的简称,是一个 Vim 插件管理器。
https://github.com/VundleVim/Vundle.vim/blob/master/README_ZH_CN.md
Vim文本对象
http://blog.carbonfive.com/2011/10/17/vim-text-objects-the-definitive-guide/
笨方法学Vimscript
http://learnvimscriptthehardway.onefloweroneworld.com/
Vim 从入门到精通
https://github.com/mhinz/vim-galore
https://github.com/wsdjeg/vim-galore-zh_cn
教程:使用 pathogen + git 管理 Vim 插件
http://lostjs.com/2012/02/04/use-pathogen-and-git-to-manage-vimfiles/
如何在 Linux 上使用 Vundle 管理 Vim 插件
https://linux.cn/article-9416-1.html
`
Vundle 安装
下载 Vundle
配置 Vundle
使用 Vundle 管理 Vim 插件
添加新的插件
列出已安装的插件
更新插件
卸载插件
资源
`
如何通过 vim 来实现代码执行及持久化等攻击
https://github.com/jaredestroud/WOTD/blob/master/%5BDARK%5D%20Weapons%20of%20%20Text%20Destruction.pdf
7种提高工作效率的Vim操作-Vim使用技巧(6)
https://vimjc.com/vim-seven-effective-ways.html
`
1. Vim重复操作命令.
2. Vim宏
3. Vim可视化模式
4. Vim normal命令
5. Vim替换命令s
6. Vim寄存器
7. Vim光标快速移动
`
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 指定参数列表可以对任意个文件执行多种操作。
`