vim进阶技巧

本文作者:IMWeb 刘志龙 原文出处:IMWeb社区 未经同意,禁止转载

都说vim是编辑器之神。

但是往往武器重要,用的人能驾驭才能把它发挥到极致,不然也就是个破铜烂铁。

vim时间也不短了,虽然离驾驭vim还差了十万八千里,但是也积累了不少实用好玩的小技巧~~

读文件

不知道经常用vim的同学有没有一个体验,经常会打开一个文件、复制内容、关闭文件、打开另一个文件、然后粘贴进去复制到内容。编辑器之神难道体验这么差?其实有更好的办法,那就是:

:read filename

一个简单的小技巧文件就读取进来啦!

缓冲区跳转

刚用vim的很长一段时间都对多文件编辑特别不习惯,知道后面明白自己忽略了缓冲区的作用。ctrl + ^ 是最常用的方式,来切换当前缓冲区和上一个缓冲区。这样非常方便来回编辑两个文件。缓冲区还提供了很多跳转命令:

:ls, :buffers      列出所有缓冲区
:bn[ext]            下一个缓冲区
:bp[revious]        上一个缓冲区
:b {number, expression}    跳转到指定缓冲区

:ls 然后输入编号是我常用的一种方式,可以快速跳转到对应文件。

搜索

简单的输入字符单文件搜索这里就不介绍了,想必用过vim的同学都知道。

如何快速对指定单词搜索?只需要将你的光标移到这个单词下然后按*就可以了,非常简单实用。

其次是多文件搜索,在vim下感觉很麻烦,其实不然。用vimgrep还是比较快捷的。

vimgrep /匹配模式/[g][j] 要搜索的文件/范围
g:表示是否把每一行的多个匹配结果都加入
j:表示是否搜索完后定位到第一个匹配位置

vimgrep /pattern/ %           在当前打开文件中查找
vimgrep /pattern/ *             在当前目录下查找所有
vimgrep /pattern/ **            在当前目录及子目录下查找所有
vimgrep /pattern/ *.c          查找当前目录下所有.c文件
vimgrep /pattern/ **/*         只查找子目录

cn                             查找下一个
cp                             查找上一个
cw                            打开quickfix

quickfix里面一样可以快捷的跳转。

区域选择

区域选择也是个非常常用的命令,其命令格式为

<action>a<object> 和 <action>i<object>
  • action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
  • object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]。

假设有一个字符串"andy",我们要把里面的andy删了然后改成zzzz,可以把光标移动到a,然后di"就把andy干掉啦,然后再输入zzzz!

宏录制

经过了上一次被轻易的干掉之后,andy怒了,他把自己隐藏在了文件的各个角落,看你还能轻易的干掉我?

13131 andy 11111111
aafsf  an aaaaaaaa andy
andy 111111

vim笑了笑,这点小事怎么难倒我,直接replace掉就完了。

但是这时候vim决定秀一波操作,掏出了一套宏录制大法。。大法上写着:

qa 把你的操作记录在寄存器 a。
@a 会replay被录制的宏。
@@ 是一个快捷键用来replay最新录制的宏。

宏录制有何用?在编辑某个文件的时候,可能会出现需要对某种特定的操作进行许多次的情况,这时候宏录制就用啦~~

看看怎么把上面每一行的andy干掉

光标定位第一行
qa 开始录制
/andy 查找andy  dw 删除andy (具体录制内容怎么写都是随便发挥的,这里只是举个例子)
q 停止录制
这样第一个andy被干掉了

然后2@@下面两个andy也被干掉了

宏录制在新入手vim应该很少会用到,但是却是进阶必须了解的一个知识~~

小结

编辑器之神的强大远非于此,只有你想不到,没有它做不到~~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android开发与分享

Android开发架构规范前言命名规范编程规范代码提交规范架构规范参考文章

3928
来自专栏大内老A

《WCF技术剖析》博文系列汇总[持续更新中]

近半年以来,一直忙于我的第一本WCF专著《WCF技术剖析(卷1)》的写作,一直无暇管理自己的Blog。在《WCF技术剖析(卷1)》写作期间,对WCF又有了新的感...

1758
来自专栏Seebug漏洞平台

初识 Fuzzing 工具 WinAFL

本文前两节将简要讨论 fuzzing 的基本理念以及 WinAFL 中所用到的插桩框架 DynamoRIO ,而后我们从源码和工具使用角度带你了解这个适用于 W...

5408
来自专栏小樱的经验随笔

BugkuCTF web基础$_POST

2903
来自专栏坚毅的PHP

进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿

电话面试被问到go的协程,曾经的军伟也问到过我协程。虽然用python时候在Eurasia和eventlet里了解过协程,但自己对协程的概念也就是轻量级线程,还...

4693
来自专栏达摩兵的技术空间

vue项目实践003

通过本问将看到我在vue的项目中,进行的一系列的项目优化,然后看到不同的维度将这些点进行分类。

1302
来自专栏JetpropelledSnake

Python入门之PyCharm中目录directory与包package的区别

对于Python而言,有一点是要认识明确的,python作为一个相对而言轻量级的,易用的脚本语言(当然其功能并不仅限于此,在此只是讨论该特点),随着程序的增长,...

64312
来自专栏技术墨客

Nodejs学习笔记(1)——安装nodejs

    关于大名鼎鼎的Nodejs是什么就不用再介绍了,他的牛逼之处数都数不完——让javascript称霸全宇宙、将一个只用于前端的编程语言同时可以制霸前后端...

962
来自专栏QQ会员技术团队的专栏

从0实现一个延迟代理服务

需求背景: 后台业务逻辑类服务,其实现通常都会依赖其他外部服务,比如存储,或者其他的逻辑server。 有一类比较典型的问题: 假设主调方A是同步处理模型,有一...

2608
来自专栏美团技术团队

RestQL:现代化的 API 开发方式

koa-restql 已经在 github 开源并在 npm 发布。感兴趣的同学可以前往围观一下。欢迎 Pull Request,同时热烈欢迎 Star。 在现...

3925

扫码关注云+社区

领取腾讯云代金券