vim总结
熟能生巧放第一句。对于vim用户还有“要多想”,特别是发现某些操作不太舒服的时候。
移动
方向键、hjkl和翻页移动不谈
查找移动:
f
F
t
T
和/
?
查找easymotion(插件):不能用于q记录命令
总结:easymotion已经在告诉你最常用的精确定位就是定位到某个单词的首尾。
修改
操作符
- 基本:d x s c y gu gU ~ v V C-v
- 插件:ys(vim-surround)
选择操作对象:
- 移动
- 文本对象:i/a + w s p b/(/) B/{/} [/] ‘ ” ` a e F (插件)
总结:文本对象是最重要的思路转变之一,不再需要去定位首尾字符
修改流程
分为 移动+修改 和 命令行 两种思路
一些问题的看法
关于键位
看到过网上一些人将键映射到-_这样的键,抱怨
Ctrl-b
,&
*
这样的键位置不好。这其实是没有习惯vim的hjkl键位,输入时仍回到jkl;导致的。hjkl使得手更集中于键盘中央,但劣势是离右边的回车、退格甚至
{
键远了hjkl姿势使用中文输入法可以用
,
.
来翻页,比较近。映射
caps_lock
是好文明,重要位置放不常用的键早该治治了。
关于插件
- 每一个插件都是因为可以解决遇到的问题而安装的,因此不可以照抄但可以参考他人的设置。
- 切忌新手时期像安装IDE一样无脑导入别人配置的大量插件。学习vim要循着解决自己操作上不便的思路来扩展插件库。
关于重复
- 众所周知vim对于重复操作有 数字 和 宏寄存器 的强大支持。但一开始你可能会发现考虑如何写出可重复的宏所需的时间,比一个一个手动做还多。对此我的看法是两方面的。
- 一方面,使用vim的基本要求就是盲打,也就是说我们对键盘本身已经较为熟悉。一些较短的操作,修改不如重做,考虑宏如何录制不如直接上手,这样操作是合理的,你可以对自己最后手打完成编辑感到安慰。
- 另一方面,养成录制即可用的宏的能力是需要练习的。
- 这个习惯可能会有帮助:当我下意识感觉到可能有需要宏操作的情况时,会直接习惯性地按qq(开始录制q寄存器),然后开始再考虑怎么写。
- 不必追求优雅无失误的宏录制。也就是说你大可以在宏中使用u和编辑退格这样的反悔操作,不用因此停止录制。
- 往大写寄存器(对我而言就是Q)录制,就是往对应的小写寄存器末尾追加内容。也就是说你第一次执行录制结果,如果发现不对,先别急着u反悔,可以打开大写寄存器在之前宏的结果上修复你的操作。还是这句话,不要怕宏录制得丑陋,反正后面
@
执行时效率高是自己爽。 - 要多想。在没有上手写的时候去考虑怎样把宏录制的过程系统地分解成步骤,然后在动手的时候有意识放慢练习。事实上相比平常的编辑就是多一步还原到下一次也可执行的状态。
实践问题
平时工作常写的是c++,以下列出一些常遇到的问题以及我的做法。
正常编辑中如果没有需要修改的错误,能在键盘中心位置正常输入到底而无需移动手指吗?能在不进入其他模式的情况下完成输入吗?
题意说明:这里意指c++的括号自动补全问题。由于方向键不在键盘中心,常常要按方向键来跳出括号是很不舒服的。例如自动补全括号会导致每句话最后的;需要移动或退出插入模式来补。
如果把
esc
映射到了一个舒服点的位置(我的在caps_lock
)可以考虑<Esc>A;
。另一种方法是在插入模式移植
emacs
那样的组合的左右移动键,例如C-h
C-l
表示左右移动。在查阅:h
决定要不要覆盖定义时积记得输入全称,即:h i_ctrl-h
而不是:h i_C-h
。
由于两个Ctrl的位置都不算舒服,而两个alt都很方便,你可能考虑交换其中一个alt
和ctrl
让移动这个日常的操作方便一点。但我发现无论有没有映射键,输入模式下alt的组合键都会直接退出输入模式。于是我在系统层面用xmodmap交换了Alt_L和Ctrl_L。事实表明这个交换影响深远,因为我以前在Alt_L上有不少操作习惯(如alt_L + tab切换页),这带来了一些麻烦,但同时按ctrl不必再大幅移动,对于一些日常的Ctrl快捷键也很爽。
现在我的方案就是
C-f
C-b
表示插入模式下的<right>
<left>
,Ctrl按左alt键。这样的操作习惯使我之后有更完整地将shell命令行的快捷键移植到输入模式的想法。还有一个理论可行的解法是取消括号补全,自行衡量。
如何快速选中一个函数/作用域?
- Title: vim总结
- Author: Endless_daydream
- Created at : 2024-03-02 15:27:05
- Updated at : 2024-03-02 17:42:53
- Link: https://endless_daydream.gitee.io/2024/03/02/vim/vim总结/
- License: This work is licensed under CC BY-NC-SA 4.0.