当前,我尝试从vim切换到emacs,并且在编辑代码时遇到一些困难。对于大多数非常简单的vim击键,我发现了emacs版本,例如简单的移动方式
h
,j
,k
,l
是C-b
,C-n
,C-p
,C-f
w
,b
是M-f
,M-b
I
,A
是C-a
,C-e
但是对于我习惯的一些“更高级”功能,我不确定emacs做事的方式是什么。
使用emacs时,当前的工作流程中存在一些问题。
请告诉我emacs人们是如何做到这一点的(显然不使用vim仿真)或替代的emacs友好型工作流程是什么。
f
跳当我在vim中写一些东西并注意时,我需要在那一行进行更改,我可以使用f
来跳转
int foo = caallFoo();
^
在这种情况下,我将Fad
删除该“ a”。在emacs中,我目前M-b
和C-f
,直到找到要编辑的字符。我尝试使用Ace Jump(这是一个不错的插件),但是对于我目前所在的行,仍然感觉很糟糕。
那么快速地在一行中导航而不发疯的emacs方法是什么?
我的工作流程通常包括在vim中打开多个窗口(例如,一个文件浏览器,4个代码窗口和一个标签栏),并使用C-w h
,C-w j
,C-w k
和C-w l
。当我按下C-w s
或C-w v
一个新窗口时,它将打开并重新布局所有窗口。
到目前为止,我已经在emacs中看到C-x 2
和C-x 3
来打开新窗口,但是它们的大小每次都变小,因为新创建的窗口和聚焦窗口现在共享空间过去具有焦点的窗口。要进行导航,我只发现C-x o
只是在各个窗口之间循环,不让我选择要访问的特定窗口。
我已经看到有些人使用插件来获得更合理的多窗口工作流。
是否已经在emacs中内置了一些不错的窗口导航功能,还是应该找到一个对我有用的插件?还是我的带有4-6个窗口的工作流是我在emacs中不应该做的事情。
我喜欢在代码文件中做的事情是创建注释以直观地标记某些部分。
////////////////////////////////////////////////////////////////////////////////
// SECTION
////////////////////////////////////////////////////////////////////////////////
在vim中,我用80a/<ESC>yyppklC
之类的东西创建它(80次附加一个'/',复制该行并将其粘贴两次,在第二行中更改第二个'/'之后的所有内容),然后输入名称。
在emacs C-u 80/
中创建第一行非常容易(80次写入'/'),但是复制粘贴的过程类似于C-a C-SPC C-e M-w <ENTER> C-y <ENTER> C-y
(如果开始,设置一个标记,转到该行的末尾,复制所有内容,两次制作新行并粘贴)。然后编写节名称C-a C-p C-f C-f C-k
(转到上一行,转到开头,向右走两个字符,删除直到结尾)
我的emacs变体使用了许多击键,并且从概念上讲更加复杂。如果我可以像在Vim中一样重复上一个操作,则复制粘贴(在vim 80a/<ESC>j.j.
中)不会有问题,但是在emacs中,重复上一个命令将导航到下一行,而不是“ 80次插入' /'“)
在浏览代码时,我喜欢做的一个更简单的动作是用C-d
和C-u
移动光标。在emacs中,我只知道C-v
和M-v
会上下移动屏幕并将光标放在开头。如何将光标向下移动半个屏幕?或者或者如何将光标放置在屏幕的中间/顶部/底部,如H
,M
,L
在vim中所做的那样?
答案 0 :(得分:2)
使用f跳转
我会C-r
a
RET
DEL
来做,那不是vim。 Vim确实在这一领域大放异彩。
导航Windows
我的工作流程是有两个窗口,C-x o
让我总是做我想做的事情。
我做了很多缓冲区切换,没有太多的窗口导航。我不会尝试在特定的窗口中获取缓冲区。
我通过任务切换来多任务,而不是同时查看多个窗口,您可能会有所不同。我使用头盔,并使用符号标签的非可视方法。就像这样,我觉得我还需要其他东西,我认为与之相关的单词,我击中C-x b
,键入这些单词,该单词位于掌舵小缓冲区的顶部。>
您可能会找到适合您风格的多窗口工作流程。
复制粘贴,移动线等
C-S-backspace
上有一条全杀线。
c-u 80 / C-S-backspace // SECTION C-y
我不知道该如何重复上一个不是动作的动作。我经常会录制一个宏,即使我打算使用两次,也可以录制简短的内容。
移动光标
C-l
将称为“ laster-top-bottom”。这将循环这些位置。
祝你好运。
答案 1 :(得分:0)
首先,您应该忘记Vi(m)。他们有不同的设计理念。
vim的编辑代码速度比emacs快(hjkl
比C-n/p/b/f
快),但是emacs提倡有效的编辑。例如:
ace-jump-mode非常好。我将跳转模式绑定到F9
。
(define-key global-map (kbd "<f9>") 'ace-jump-mode)
F9
char
开头的单词跳转到任何地方C-x 3
垂直分割框C-x 2
水平分割框C-x 1
关闭当前帧以外的其他帧(不关闭文件)C-x 0
关闭当前框架我认为emacs分割窗口比vim(:split
)好,但是切换窗口比vim(C-x o
)麻烦。您可以使用emacs-winum:
(setq winum-keymap
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-c `") 'winum-select-window-by-number)
(define-key map (kbd "M-0") 'winum-select-window-0-or-10)
(define-key map (kbd "M-1") 'winum-select-window-1)
(define-key map (kbd "M-2") 'winum-select-window-2)
(define-key map (kbd "M-3") 'winum-select-window-3)
(define-key map (kbd "M-4") 'winum-select-window-4)
(define-key map (kbd "M-5") 'winum-select-window-5)
(define-key map (kbd "M-6") 'winum-select-window-6)
(define-key map (kbd "M-7") 'winum-select-window-7)
(define-key map (kbd "M-8") 'winum-select-window-8)
map))
通过Meta + 0/1/2/3 ...
切换帧,非常方便。
Emacs就像IDE一样沉重; Vim就像编辑器一样,轻巧。
答案 2 :(得分:0)
我同时使用 vim 和 emacs,如果您能够弄清楚 emacs,它确实可以做得很好。