我已经使用 vim 几个月了,我对它又爱又恨。我喜欢模式编辑的概念,而且永远不需要将手从键盘上移开。问题是,很多键似乎位于尴尬的位置,插件很容易与自定义 vimrc 文件相互冲突。
我做了一堆对我来说似乎更直观的更改,所以我想知道不使用默认配置是否会失去任何好处?除了 Vi 和 Vim 在 *nix 世界中无处不在(因此使用默认设置更容易在计算机之间移动)之外,对键映射进行大量更改是否还会失去其他好处?
答案1
我喜欢模态编辑的概念,这样就无需将手从键盘上移开。
在切换到 Vim 之前,我使用 TextMate 90% 的时间都没有使用鼠标。Vim 允许我使用 100%,但那 10% 几乎察觉不到。
问题是,很多钥匙似乎都放在了尴尬的位置
不,问题在于你关注的是它们的物理位置而不是它们的含义。如果你知道你的键盘布局,按键的位置并不重要;重要的是你在这些按键之间建立的逻辑联系。但我承认这可能需要一段时间。我见过许多图形化备忘单,它们犯了一个不可原谅的错误,即实际显示键盘并将命令与按键的物理位置联系起来。使用这种表示方式,几乎不可能理解 Vim 的语言(因为它是一种语言)。
(而且插件似乎存在设计缺陷:它们很容易相互冲突并且与您自己的 vimrc 文件冲突)。
我认为我还没有大规模地经历过这种情况,但当然,使用两个插件绑定到同一个键作为您的自定义映射之一是一种会产生问题的策略。
我将“hjkl”移到了“jkl;”,同时将方向改为了 <^v> (在我看来,通过箭头键转换更容易)
hjkl
或者jkl;
只有在以下情况下才有意义:
a. 你是一名盲打者
b. 你的键盘没有箭头键
c. 你有一个 QWERTY 键盘
我尝试过hjkl
切换,但我发现它并不比箭头键好。由于我不是盲打者,而且我使用的是普通的 AZERTY 键盘,所以我又回到了箭头键,反正我也不怎么用:VimwWEeBbfFtT/?
和其他各种动作和文本对象使逐字符和逐行移动 ( hjkl
) 变得可笑。
再次,Mac OS X 拥有大量功能强大但令人惊讶的鲜为人知的编辑快捷方式,当充分利用它们时,可以很容易地浏览文件而无需逐个字符地移动。这里是 Cocoa 快捷键列表,Windows 和 KDE/Gnome 也都有自己的快捷键。从此系统迁移到 Vim 的酷炫动作和搜索非常简单。
已移动:至,
<Tab>
因为它默认不执行任何操作。
你是什么意思?你按下“ ”<Tab>
来调用命令模式吗?如果是这样,你实际上是如何在插入模式下输入 Tab 的?
映射:跳转到下一个单词的开头(w),J 跳转到上一个单词的开头。
我还是不明白::
通常用于调用命令模式,为什么要用它来移动到下一个单词?并且J
用于J
联机,让它做其他事情有什么好处?b
eginning 和w
ord 有什么问题?
映射
<C-k>
到跳转到文件开头和<C-l>
跳转到文件结尾。
再次,是否G
太难gg
输入或难以记住?
此外,由于我正在设置它,它的工作原理可以帮助我记住(我也做笔记,以便其他人可以轻松了解我在做什么)。
我完全同意,定制 Vim 对我帮助很大。
现在我已经解决了这个问题,我想知道不使用默认配置是否会降低工作效率?除了 Vi 和 Vim 在 *nix 世界中无处不在(因此使用默认配置在计算机之间移动会更容易)之外,对键映射进行大量更改是否还会让我失去其他好处?或者建议我让 Vim 更适合自己并根据情况进行更多配置?
一开始我也是这么做的。从 TextMate 切换过来后,我的反应是让 Vim 成为我之前编辑器的克隆。我逐字逐句地复制了其他人的.vimrc
代码,安装了几十个插件,创建了许多奇怪的映射等等,直到有一天,当我在远程服务器上使用 SSH 连接时,我发现如果没有这些东西,我根本不知道如何使用 Vim。完全不知道。我的超定制 MacVim 不再是 Vim,隐藏了 Vim 的所有精彩之处。所以我决定删除所有内容,从一个空的~/.vimrc
、一个空的~/.vim/
和重新开始$ vimtutor
。
这是我短暂的前端程序员生涯中最好的决定。
当然,我的~/.vimrc
已经成长了。当然,我有很多自定义映射。当然,我使用插件。但现在我不再依赖它们了。我已经学到了足够多的“Vim 方式”,使我比以前更有效率,但我还是个菜鸟。
所以,我的回答是,你试图定制 Vim 的行为是错误的,你应该先学习基础知识。
但这只是我的观点。
答案2
这只是一种观点,而不是确切的答案,但我认为从长远来看,按原样学习 Vim 的按键会更好。您可能需要稍微多花一点时间来学习它们的原始绑定,但我认为不会花那么长时间,之后您不会注意到,而且您将能够在其他计算机上使用 Vim,而无需进行自定义。此外,随着您学习 Vim,您会发现它的更多功能,并且可能想要使用您现在已将其按键绑定到其他功能的功能。
我不太清楚你对:
(冒号) 键做了什么,但如果你将它映射到其他东西上,你如何调用 ex 命令?这就是你现在的 <Tab> 所做的吗?
功能绑定到单个按键或按键对的插件经常会与其他插件发生冲突。有时插件作者会让用户轻松选择其他按键绑定;有时则不会。
答案3
我个人认为你应该学习映射。它使阅读关于较晦涩函数的提示或教程变得更容易。
将来,您将遇到这样的问题:现在将 Vim 功能的未来阅读内容翻译为您自己的功能的键映射。如果有的话,我建议您为某些工作流程创建别名或宏。例如,我几乎永远无法记住for
批处理文件中命令接受的所有开关。因此,当我去编写批处理文件时,我有一个别名,它会在分割窗口中加载包含所有开关和选项的文本文件。