我听说过很多关于Vim的事,包括优点和缺点。 (作为一名开发人员)使用Vim确实应该比使用其他任何编辑器都要快。 我用Vim来做一些基本的事情,我用Vim最多只能减少10倍的效率。

当你谈论速度时,只有两件事你应该关心(你可能不够关心,但你应该关心):

左右交替使用的 用手是最快的方法 键盘。 永远不要碰鼠标 第二种方法是尽可能快。 你要花很长时间才能移动你的手, 抓住鼠标,移动它,把它带来 回到键盘上(你经常这样做 看看键盘,确保你 将你的手正确地回到正确的位置)

下面的两个例子说明了为什么我使用Vim效率低得多。

复制/剪切和粘贴。我一直都这么做。在所有当代编辑器中,你用左手按Shift键,用右手移动光标来选择文本。然后按Ctrl+C复制,移动光标,按Ctrl+V粘贴。

Vim的情况很糟糕:

Yy复制一行(你几乎不需要整行!) [number xx]yy复制xx行到缓冲区。但你永远不知道你是否选择了你想要的。我经常要做[number xx]dd然后u来撤销!

另一个例子吗?搜索和替换。

在PSPad中:按Ctrl+f,然后输入你想要搜索的内容,然后按Enter。 在Vim: /中,然后输入你想要搜索的内容,然后如果有一些特殊字符,在每个特殊字符前放\,然后按Enter。

Vim的一切都是这样的:似乎我不知道如何正确处理它。

注:我已经读了Vim小抄:)

我的问题是:

与当代编辑器相比,您使用Vim的哪些方式使您的工作效率更高?


当前回答

正常模式:

F <char>移动到当前行上特定字符的下一个实例,并且;重复。

F<char>移动到当前行上一个特定字符的上一个实例;重复。

如果使用得当,以上两点可以让你在队列中快速移动。

*在一个单词上搜索下一个实例。

#来搜索前一个实例。

其他回答

我经常使用的另一个有用的vi快捷方式是“xp”。这将把光标下的字符与下一个字符交换。

你可以在替换字符串中使用\=,这是我经常做的事情。

如果你在vim中有一个无序列表,比如使用#作为标记,你可以将它转换为有序列表。

# CSSLINT
# PHPCS
# Charlie
# Delta

如果从一号线开始,你就可以

:1,6s/#/\=line(".")/g

把它转换成

1 CSSLINT
2 PHPCS
3 Charlie
4 Delta

如果它不是从第一行开始的,只要计算一下:

:16,20s/#/\=line(".") - 15/g

更多信息见:help sub-replace-expression

视觉模式

As several other people have said, visual mode is the answer to your copy/cut & paste problem. Vim gives you 'v', 'V', and C-v. Lower case 'v' in vim is essentially the same as the shift key in notepad. The nice thing is that you don't have to hold it down. You can use any movement technique to navigate efficiently to the starting (or ending) point of your selection. Then hit 'v', and use efficient movement techniques again to navigate to the other end of your selection. Then 'd' or 'y' allows you to cut or copy that selection.

与Jim Dennis描述的vi中的剪切/复制/粘贴相比,vim的可视模式的优势在于,您不必获得完全正确的位置。有时,使用一个快速的移动来达到你想要去的地方的大致位置,然后用其他动作来完善它,比想出一个更复杂的单一移动命令更有效,它可以让你确切地到达你想要去的地方。

以这种方式广泛使用可视化模式的缺点是,它可能会成为您一直使用的拐杖,阻碍您学习新的vi(m)命令,而这些命令可能会让您更有效地做事。但是,如果您非常积极主动地学习vi(m)的新方面,那么这可能不会对您产生太大影响。

我还要再次强调,视觉线条和视觉块模式可以让你在相同的主题上产生非常强大的变化,尤其是视觉块模式。

关于键盘的有效使用

I also disagree with your assertion that alternating hands is the fastest way to use the keyboard. It has an element of truth in it. Speaking very generally, repeated use of the same thing is slow. This most significant example of this principle is that consecutive keystrokes typed with the same finger are very slow. Your assertion probably stems from the natural tendency to use the s/finger/hand/ transformation on this pattern. To some extent it's correct, but at the extremely high end of the efficiency spectrum it's incorrect.

随便问问钢琴家就知道了。问他们是用手交替演奏几个音符,还是用一只手连续的手指按顺序演奏更快。输入4个按键的最快方法不是双手交替,而是用同一只手的4个手指按升序或降序输入(称之为“运行”)。一旦你考虑过这种可能性,这应该是不言而喻的。

更困难的问题是为此进行优化。优化键盘上的绝对距离非常简单。Vim做到了这一点。在“运行”级别上进行优化要困难得多,但是vi(m)与它的模态编辑相比,任何非模态方法(嗯哼,emacs)都更有可能做到这一点。

在Emacs

为了避免emacs狂热者因为最后的插入式评论而完全忽视我的整篇文章,我觉得我必须描述一下emacs和vim宗教之间的根本区别。我从来没有在编辑大战中说过,我可能不会再这样做了,但我从来没有听过有人这样描述它们的区别,所以就这样吧。区别在于以下权衡:

Vim为您提供无与伦比的原始文本编辑效率 Emacs为您提供了无与伦比的自定义和编程编辑器的能力

盲目的vim狂热者会声称vim有脚本语言。但它是一种晦涩的、专为编辑器设计的语言。Emacs有Lisp!足够的说。如果您不理解最后两句话的重要性,或者希望学习足够多的函数式编程和Lisp知识来理解它们,那么您应该使用vim。

emacs狂热者会声称emacs有viper模式,因此它是vim的超集。但毒蛇模式不是标准模式。我的理解是大多数emacs用户都不使用viper模式。因为它不是默认的,所以大多数emacs用户可能并没有真正认识到模态范例的好处。

在我看来,这些差异是正交的。我相信vim和emacs的优点都是有效的。这意味着终极编辑器还不存在。emacs可能是最容易构建最终编辑器的平台。但是模式编辑在emacs思想中并不是根深蒂固的。emacs社区在未来可能会朝着这个方向发展,但这似乎不太可能。

因此,如果你想提高原始编辑效率,请使用vim。如果您需要编写脚本和编辑器编程的终极环境,请使用emacs。如果您希望两者兼得,并强调可编程性,请使用带有viper模式的emacs(或编写自己的模式)。如果你想两全其美,那你现在就不走运了。

这是我发现的另一个对学习Vim有帮助的网站。这也很有趣!:)

VIM Adventures是一款基于VIM键盘快捷键的在线游戏 (命令,动作和操作符)。这是《塞尔达传说》与文本编辑的结合 游戏。这是一个练习和记忆VIM命令的益智游戏 (当然,不错的老VI也包括在内)。这是一种简单的学习方法 VIM没有陡峭的学习曲线。

这些都不是捷径,但它们是相关的:

将capslock设置为额外的ESC(或Ctrl) 用下面的命令将领导者映射到“,”(逗号):let mapleader=“,”

他们提高了我的工作效率。