原生Vim中的高效操作
原生Vim中的高效操作
Vim中有些按键能极大的提高幸福度,减少用脑,减少肌肉劳损,笔者用了一年Vim+vscode在这里小结下这段时间最常用的按键。(除了h,j,k,l
等最常用最基本的)
文章目录
- 原生Vim中的高效操作
- 一、用区间选择减少移动:`i`(in) 和 `a`(around)
- 二、快捷键查找光标下关键字:`#` 和 `*`
- 三、迅速找到类名:`[{` 和 `]}`
- 四、指定位置插入:`A`,`I`,`C`,`S`
- 五、覆盖粘贴当前单词 `viwp`
- 六、多行插入相同内容:`数字+o`
- 七、跳转到上次位置:`ctrl-o`,`ctrl-i`
- 八、快速复制寄存器内容到命令行:`ctrl-r + "`
- 九、命令行查找历史命令:`ctrl-f`
一、用区间选择减少移动:i
(in) 和 a
(around)
区间选择,我最常用最喜欢的按键。需要和y,c,d
搭配使用。尤其是当光标处于单词中间,要想delete这个单词,你可能会用bdw
三个按键。先back到单词开始,再delete word,大脑要停顿一下,看光标位置再思考三个键。但有了in
和around
只要光标在单词范围内,按下diw
即可。(或daw
如果想删除空格)。
你可能不make sense,两方案都用了三个按键,只是少了用脑。但如果一段内容在<>,(),{}当中,就需要来到开始位置切换到visual模式控制光标选择括号中的内容… bla~bla,烦死了。但现在有了i)
,只要ci)
,di)
,yi)
就能直接修改,删除,复制整个()里的内容,对于a
也是相似的。
举一个模板的例子:
template <typename T, typename U>
如果没有i>
,需要移动到开始位置然后用t
去选择,浪费了脑力和肌肉。现在只要yi>
就能复制typename T, typename U
进一步,想连同复制<>,ya>
或ya<
就能复制整个<typename T, typename U>
前提是光标在<>之间。
再举一个代码块的例子:
{if (loopInBlock >= MAX_LOOP_IN_BLOCK){raise("It is max loop now");}
}
可以用ya}
复制整个代码块,只要光标在代码块中,vim会自动匹配括号的层次。(注意为character-wise)
二、快捷键查找光标下关键字:#
和 *
笔者曾经总用/
输入很长的字符串查找,但自从知道了#
和*
就很少直接输入字符串了。#
意思是向上查找当前光标下的word
,*
则是向上查找。也可以配合n
重复上次查找和N
反向重复上次查找。
三、迅速找到类名:[{
和 ]}
试想有一个很长的类,好几百行,屏幕放不下。光标在类当中,想迅速跳转到类的名字看看父类是什么,那就要用{[
,意思是跳转到最近的匹配的{
。
四、指定位置插入:A
,I
,C
,S
这四个键太喜欢了,效率非常高,C
最常用。意思是:
A
转到行尾并插入,I
转到行首并插入,C
删除到行尾并插入,S
删除行并插入。
不知道这四个键,那只有:$a
,0i
,c$
,ddO
,多了脑力和手指移动。
五、覆盖粘贴当前单词 viwp
如果刚开始用vim不久,可能想怎么replace一个单词,可能要先daw
删除当前单词,然后看一下要粘贴的内容在哪个寄存器(daw改变了寄存器),然后p"1
粘贴。(好烦)
一旦进入visual模式,replace就方便很多。按v
进入visual,iw
选中单词,然后p
黏贴就好了。
六、多行插入相同内容:数字+o
写一个enum类,他们的前缀可能是一样的,可能要不停的黏贴黏贴…有了多行插入只需要数字+o
输入完毕后ESC
就能发现内容重复了多行。(实际上是重复了多次命令)
七、跳转到上次位置:ctrl-o
,ctrl-i
跳转到上次阅读代码的位置,非常常用。ctrl-o
跳转到上次位置,ctrl-i
返回
八、快速复制寄存器内容到命令行:ctrl-r + "
常用,尤其是配合/
查找%s
字符串替换,:find
查找文件。ctrl-r
之后通过"
选择寄存器,将寄存器的内容yank到命令行中。
九、命令行查找历史命令:ctrl-f
常用于查找debug print, 输入了多个命令,通过ctrl-f
会产生历史命令的quickfix。
笔者由于是vscode+vim的混合环境,所以一般只用vim编辑,不在project层次使用,因此这些按键在这种程度上就够用了。有更好的按键和使用情景欢迎分享~~
原生Vim中的高效操作相关推荐
- vim关闭下一行也是注释_在Vim中注释/取消注释行的快速方法是什么?
我有一个在vi中打开的Ruby代码文件,其中的行注释为#: class Search < ActiveRecord::Migration def self.up # create_table : ...
- python中tolist_高效的张量操作 Pytorch中就占5种
PyTorch是一个基于Python的科学包,用于使用一种称为张量的特殊数据类型执行高级操作. 虽然也有其他方式可以实现相同的效果,但今天分享的这5个操作更加方便高效,值得一试. 什么是张量? 张量是 ...
- linux vi 选中某一列,在 Vim 中进行文本选择操作和使用标志
基于图形界面的文本或源代码编辑器,提供了一些诸如文本选择的功能.我是想说,可能大多数人不觉得这是一个功能.不过像 Vim 这种基于命令行的编辑器就不是这样.当你仅使用键盘操作 Vim 的时候,就需要学 ...
- lambda在python_在Python中使用lambda高效操作列表的教程
介绍 lambda Python用于支持将函数赋值给变量的一个操作符 默认是返回的,所以不用再加return关键字,不然会报错 result = lambda x: x * x result(2) # ...
- Fluid — 云原生环境下的高效“数据物流系统”
作者 | 顾荣 南京大学 PASALab (注:本文基于作者公开演讲报告内容整理完成) _来源 | _阿里巴巴云原生公众号 得益于计算成本低.易于扩展.部署便捷.运维高效等多方面的优势,云计算平台吸 ...
- 如何为云原生应用带来稳定高效的部署能力?
作者 | 酒祝 阿里云技术专家.墨封 阿里云开发工程师 直播完整视频回顾:https://www.bilibili.com/video/BV1mK4y1t7WS/ 关注"阿里巴巴云原生&qu ...
- openresty开发系列27--openresty中封装redis操作
openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...
- 什么是在Vim中评论/取消注释行的快速方法?
我在vi中打开了一个Ruby代码文件,有一些注释掉了# : class Search < ActiveRecord::Migrationdef self.up# create_table :se ...
- 大话云原生数据库中的存算分离
目录 前言 传统数据库的局限 可用性低.资源利用率低 扩展成本高.运维成本高 存算分离带来的技术革命 谷歌三架马车奠定理论基础 Hadoop--存算分离的大数据架构 为什么云原生数据库中需要存算分离? ...
- 是程序员都可能用到版本控制,如何使用它?如何在Vim中使用Git?
版本控制是本章的重要内容之一.虽然本书选择的版本控制系统是Git,但是本章的知识也适用于其他版本控制系统.本章只提供了一节内容简略地介绍版本控制,如果读者想要更深入地了解,还需要有针对性地阅读相关材料 ...
最新文章
- python request timeout是什么意思_request timeout是什么意思
- Git版本服务器搭建(CentOS)--gitblit
- c类网络使用子网掩码有无实际意义_弄懂IP系列(2)(刘晶作品)|子网掩码到底是啥?...
- 解决go包管理代理网址无法访问:proxy.golang.org 换成goproxy.cn
- oracle 01589,ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
- IOS 文本文字下面添加下划线
- java修饰方法_java接口中方法、属性修饰符详解
- DOM 事件深入浅出(一)
- 枚举算法:最小连续n个合数。试求出最小的连续n个合数(其中n是键盘输入的任意正整数)。
- SCPPO(二十八):通过JS实现自动刷新进度
- 电脑从硬盘启动计算机,电脑怎么设置第一启动项为硬盘
- 《精通软件性能测试与LoadRunner最佳实战》—第2章2.9节运行结果分析
- SNAP Java API处理Sentinel-1数据
- wamp5工具安装介绍
- OpenCV之VideoCapture的使用——打开网络摄像头/图像序列
- 【HDU 5755】Gambler Bo(高斯消元)
- 区块链技术的风险!(转载)
- java实现高德地图app_入门指南-高德地图手机版 | 高德地图API
- 网络安全- 专访丨互联网安全城市巡回赛冠军肖策:“大满贯”背后的秘密
- Exercise – SE Technical Boot Camp Hands-on Exercises