【问题标题】:Use the default-input-method when doing an incremental search in EVIL?在 EVIL 中进行增量搜索时使用默认输入方法?
【发布时间】:2013-03-02 00:59:58
【问题描述】:

在为 emacs 中的 vim 仿真加载 EVIL 之前,我的 .emacs 文件中有以下内容:

(activate-input-method "english-dvorak")
(setq default-input-method "english-dvorak")

但是,当我键入/ 以使用 EVIL 启动增量搜索时,并没有使用默认输入法。为什么是这样?每当我在屏幕上输入字母时,我怎样才能使 EVIL 使用默认输入方法?

我能够通过在执行这些函数的其余代码之前将 qwerty 字符映射到 dvorak 来正确支持 ft 命令,但我仍然无法进行搜索与 / 一起使用 dvorak。

【问题讨论】:

  • C-h f toggle-input-method 应该有帮助。
  • 这对我来说很好用。你在使用香草搜索吗?如果你以-Q 启动emacs 是否有效?
  • @Thomas 抱歉,我的问题实际上比我想象的更复杂,我已经更新了问题以反映这一点。上面的解决方案实际上在 vanilla emacs 中运行良好,但在 EVIL 中不起作用。

标签: emacs customization evil-mode


【解决方案1】:

我在我的 PC 上测试了以下配置,它似乎使 Dvorak 在 Emacs 中无处不在:

;; Main setup for  all the buffers
(defadvice switch-to-buffer (after activate-input-method activate)
  (activate-input-method "english-dvorak"))

;; Sets up Dvorak for the minibuffer
(add-hook 'minibuffer-setup-hook (lambda () (set-input-method "english-dvorak")))

;; Sets up Dvorak for *scratch* buffer (used Qwerty on my PC otherwise)
(save-excursion
  (set-buffer (get-buffer "*scratch*"))
  (set-input-method "english-dvorak"))

【讨论】:

  • 抱歉,我的问题实际上比我想象的要复杂,我已经更新了问题以反映这一点。我遵循了我最初概述的程序,问题消失了,尽管看起来你的建议也可以解决问题。 :)
【解决方案2】:

问题是 Evil 的增量搜索是在正常状态下执行的,据我所知,它不能与输入法一起使用。这是一个快速破解,在执行搜索之前切换到插入状态以允许使用输入法。由于它在搜索完成后立即切换回正常状态,因此唯一的怪癖是在执行搜索时缓冲区中的光标不同。

 (evil-define-motion evil-search-forward ()
  (format "Search forward for user-entered text.
Searches for regular expression if `evil-regexp-search' is t.%s"
          (if (and (fboundp 'isearch-forward)
                   (documentation 'isearch-forward))
              (format "\n\nBelow is the documentation string \
for `isearch-forward',\nwhich lists available keys:\n\n%s"
                      (documentation 'isearch-forward)) ""))
  :jump t
  :type exclusive
  :repeat evil-repeat-search
    (progn                 ;MADE CHANGES HERE
      (evil-insert-state)
      (evil-search-incrementally t evil-regexp-search)
      (evil-normal-state)
    ))

(evil-define-motion evil-search-backward ()
  (format "Search forward for user-entered text.
Searches for regular expression if `evil-regexp-search' is t.%s"
          (if (and (fboundp 'isearch-forward)
                   (documentation 'isearch-forward))
              (format "\n\nBelow is the documentation string \
for `isearch-forward',\nwhich lists available keys:\n\n%s"
                      (documentation 'isearch-forward)) ""))
  :jump t
  :type exclusive
  :repeat evil-repeat-search
    (progn                 ;MADE CHANGES HERE
      (evil-insert-state)
      (evil-search-incrementally nil evil-regexp-search)
      (evil-normal-state)
    ))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多