首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >viper-auto-indent中断低级模式

viper-auto-indent中断低级模式
EN

Stack Overflow用户
提问于 2009-09-28 16:22:33
回答 2查看 380关注 0票数 0

作为一个vim的转换者,我已经相当习惯了viper模式。然而,我发现的一个问题是,viper-auto-indent会破坏所有的低级模式。当我进入任何一种下级模式(sql-mode、ess-mode等)时会发生什么。然后按Enter,Enter键实际上并没有将命令发送到下级进程,而是给出了进程挂起的外观。

在没有设置viper-auto-indent的情况下,我遇到了在编写代码时Enter键不能自动缩进的问题,这意味着我需要在输入新行后总是按tab键,这很烦人。我一直使用的变通方法是在默认情况下启用viper-auto-indent (因为我花了大部分时间进行编程),然后在进入次模式缓冲区时禁用它。

有人知道如何解决这个问题吗?或者,有没有人可以帮我提供elisp,在切换到内部模式缓冲区时禁用viper-auto-indent,并在非低级模式缓冲区中启用它?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2009-09-29 09:05:45

我认为Emacs的目的是让您使用"C-j“进行换行和缩进,让Enter保持原样。

如果您还不能接受,那么这个未经测试的代码可能会起作用:

代码语言:javascript
运行
复制
(add-hook 'inferior-ess-mode-hook
               '(lambda () (set (make-local-variable 'viper-auto-indent) nil))
票数 1
EN

Stack Overflow用户

发布于 2009-10-01 15:50:40

我无法重现你的问题。我尝试了所有级别的毒蛇模式(1-5),以及一些较低级别的进程。也就是说,从您的实际问题来看,此代码看起来应该符合要求。如果/当调用'viper-autoindent时,如果当前缓冲区有一个进程,它将调用刚刚按下的键的原始绑定。如果没有进程,则调用原始的viper-autoindent。

代码语言:javascript
运行
复制
(defadvice viper-autoindent (around viper-autoindent-but-not-when-buffer-has-process activate)
  "work around reported user problem"
  (if (and (this-command-keys)
           (get-buffer-process (current-buffer)))
      (let* ((viper-mode nil)
             (thiskey (key-binding (this-command-keys))))
        (when thiskey
          (call-interactively thiskey)))
    ad-do-it))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1487971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档