简单Emacs键绑定

简单Emacs键绑定,emacs,buffer,customization,key-bindings,Emacs,Buffer,Customization,Key Bindings,我一直在Emacs中执行两个操作: 创建新缓冲区并粘贴剪贴板。C-S-n 关闭当前缓冲区。C-S-w 切换到上次查看的缓冲区。C-标签 在做前两个操作时,我感觉自己像个键盘杂技演员。我认为值得尝试一些自定义键绑定和宏 有关此定制的几个问题: 如何为#1生成宏 这些是好的密钥绑定吗?(我知道这有点主观,但它们可能被我不使用的流行的东西所使用。) 有没有人找到一个在Linux/Windows中可以像Alt+TAB一样工作的C-TAB宏?具体地说,我希望根据上次查看的时间戳(最新的在顶部)拥有一堆缓冲

我一直在Emacs中执行两个操作:

  • 创建新缓冲区并粘贴剪贴板。C-S-n
  • 关闭当前缓冲区。C-S-w
  • 切换到上次查看的缓冲区。C-标签
  • 在做前两个操作时,我感觉自己像个键盘杂技演员。我认为值得尝试一些自定义键绑定和宏

    有关此定制的几个问题:

  • 如何为#1生成宏
  • 这些是好的密钥绑定吗?(我知道这有点主观,但它们可能被我不使用的流行的东西所使用。)
  • 有没有人找到一个在Linux/Windows中可以像Alt+TAB一样工作的C-TAB宏?具体地说,我希望根据上次查看的时间戳(最新的在顶部)拥有一堆缓冲区。我想继续在堆栈中循环,直到放开Ctrl键。释放Ctrl键时,我希望当前缓冲区在堆栈上获得更新的位置
  • 通过调用开始kbd宏开始,通过结束kbd宏结束。之后,您可以立即使用调用最后一个kbd宏来测试新宏。如果你对结果感到满意,你可能会想要
  • Emacs通常不使用C-S键绑定,而且它们很容易使用,所以我认为它们很好用。如果您使用的是Emacs的终端版本,它们可能会导致问题,但我认为您的情况并非如此
  • 我使用这个简单的片段:

    (全局设置键(kbd“”)“缓存)

  • bury buffer基本上使当前缓冲区成为缓冲区列表中的最后一个缓冲区,因此您可以按可预测的顺序循环缓冲区

  • 我不会为此制作一个宏,而是像其他人在这个页面上发布的那样编写一个函数。您也可以使用
    (yank)
    来代替
    (cua paste nil)
    。我不知道哪一个更好,为什么
  • 我不太喜欢它们。对于我经常使用的东西,我想做尽可能多的小指特技,这意味着修改器+键而不是修改器1+修改器2+键。。或者,如果您不觉得与homerow绑定,请使用功能键
  • 无可奉告

  • 您是否为此尝试过使用垂直或水平拆分窗口(通过C-x 3或C-x 2)?它似乎会给你更少的步骤——即使你实现了你正在谈论的东西

    我发现拆分窗口确实加快了复制和粘贴操作。我使用数字键盘上的箭头键在窗口之间切换(
    windmove left
    /
    -right
    /
    -up
    /
    -down
    ),因此只需按一个键,即可转到所需窗口

    我想这和你所要求的有点不同,但听起来可能有助于加快进度

    C-x左键和C-x右键在缓冲区中循环,但你必须多次按下它,你不能一直按下键


    要为#1创建宏,只需启动宏,按通常创建新缓冲区的键,然后停止宏

    所以它会是这样的:

    C-x(C-x b
    NEW
    RET C-x)

    粘贴完成后,您可以将
    NEW
    保存到文件中,以便再次使用宏创建新的缓冲区。C-x e来尝试宏。如果有效,您可以将其保存到
    init.el
    文件中。这是通过以下方式完成的:

    M-x
    name last kbd宏

    然后,系统会提示您输入所选的名称。这仅适用于当前会话。然后将命名宏保存到初始化文件中。首先打开
    .emacs
    init.el
    文件。然后将点放置在希望宏定义的位置,然后键入:

    M-x
    插入kbd宏

    现在,您可以通过M-x
    使用宏的名称运行宏。您也可以将宏绑定到键(在
    .emacs
    init.el
    文件中):

    您还可以加入粘贴、缓冲区关闭和缓冲区切换操作。我猜您必须手动将缓冲区保存到文件中

    一些资源

    • 有关EmacsWiki的信息

    • 可能有用:

    (global-set-key (kbd "C-c a") '<macroname>)
    
    ;; Creates a new unassociated buffer called NEW
    (fset 'new-buffer "\C-xbNEW\C-m");
    ;; Shortcut for new-buffer
    (global-set-key (kbd "C-c n") 'new-buffer)