我最近在使用Vim很长一段时间之后开始使用Emacs(和那里的许多其他人一样),我个人觉得Vim移动键和文本对象是编辑器可以拥有的最好的东西之一.我听说过使用不同的插件在Emacs中模拟这些功能,但是在互联网上阅读了一些之后,我很困惑.
我特别遇到了三种模式:Viper,Vimpulse和Evil.有人可以帮助我了解如何使用这些模式来实现近乎完美的Vim仿真吗?我需要安装所有这三个吗?他们之间有什么区别?谢谢.
有没有人知道如果对于emacs存在类似这样的Vim相对行号的话?我使用vimpulse和man,这将是非常方便的!我知道一些口齿不清,所以如果没有,我可以尝试自己做,如果我在正确的方向得到一个点.
更新:由于正确的响应,我想出了这个,它将显示当前行的1,以及前一行的-1,用于与vimpulse yanks和deletes组合.
非常感谢所有帮助过的人!我知道这不完全是Vim所做的,但是vim中从0开始的相对行号有什么用呢?愚蠢的vim.
(defvar my-linum-current-line-number 0)
(setq linum-format 'my-linum-relative-line-numbers)
(defun my-linum-relative-line-numbers (line-number)
(let ((test2 (1+ (- line-number my-linum-current-line-number))))
(propertize
(number-to-string (cond ((<= test2 0) (1- test2))
((> test2 0) test2)))
'face 'linum)))
(defadvice linum-update (around my-linum-update)
(let ((my-linum-current-line-number (line-number-at-pos)))
ad-do-it))
(ad-activate 'linum-update)
Run Code Online (Sandbox Code Playgroud) Vim中缺少Emacs的重要功能,例如comint模式,并且没有可以替换它们的脚本/插件.
Vim相对于Emacs也有好处,例如模态编辑和通常更好的默认快捷方式.但是,Viper模式让我两个都有.Vimpulse还支持可视模式.不幸的是,没有任何模式可以让Emacs像Vim一样快速地工作.
所以我主要学习了Vim-in-Emacs.我错过了什么Vim功能?
这看起来非常简单,但我想知道如果我打开它后如何关闭毒蛇模式M-x viper-mode
.我试过(setq viper-mode nil)
但是没有这样做.
我正在从vi移动到emacs,并且使用viper和vimpulse,当我C-w C-w
进入窗口并且无法使用相同的命令返回原始窗口时它会变得非常烦人,因为另一个缓冲区(可能是帮助缓冲区)不是在Viper模式下.我怎样才能解决这个问题?
我尝试将其他模式添加到viper配置中,并使用默认情况下使用挂钩启动viper模式:
(add-to-list viper-vi-state-mode-list 'help-mode) (add-hook 'help-mode (lambda () (setq viper-mode t)))
但这些命令都没有奏效.实际上,第一个产生了以下错误:
Warning (initialization): An error occurred while loading `/home/konrad/.emacs.d/init.el': Wrong type argument: symbolp, (fundamental-mode ...
除此之外C-w C-w
,我也错过了无法使用hjkl进行导航.有没有办法重用viper设置的键绑定,而不是为每种模式重新绑定它们?
我想按下;
进入ex模式,而:
不是有人知道如何配置vimpulse来实现这一目标吗?谢谢!
我正在使用 Colemak 键盘布局,并且想使用Vimpulse从此处尝试 Vim 布局。然而,布局重新映射了命令前缀 Vim 键“c”和“d”等,并且这些键似乎无法使用标准 Viper 键重新映射命令轻松重新映射。它们都映射到 viper 键盘映射中的“viper-command-argument”,实际的按键功能似乎是在 Viper 源代码的其他地方定义的。
有没有比分叉 Viper 源的本地副本并在其中重新定义魔术前缀键值更简单的方法将前缀命令重新绑定到其他键?
任何其他调整使emacs尽可能像vim一样也将受到赞赏.
附录:我不仅仅使用vim的主要原因是我喜欢emacs如何让你在两个不同的框架中打开文件[添加:对不起,这很令人困惑:我的意思是单独的窗口,emacs称之为"框架"].这就像进行垂直分割,但我没有一个巨大的窗口.