如何在头盔中恢复TAB自动完成的任何类似行为?

时间:2013-09-24 16:54:42

标签: emacs emacs-helm

提出了一个相关问题here。但答案是习惯了自动完成工作的新方式掌舵。我不能习惯它,这就是原因。

说,我想打开一个文件/home/user/work/f.txt。我做 C-x C-f ,它将我带到当前目录,比如/current/dir/。我点击 Backspace 并注意到自动填充功能不允许我删除/。好的,使用 C-Backspace 关闭自动完成功能。然后杀死 C-a C-k 行并开始输入。请注意,自动完成功能不起作用,请将其重新打开 C-Backspace 。通常我会输入我知道可能是唯一的部分,例如/hom并点击标签

不在这里。只要我输入/ho,自动整理就会将其解析为/home/,但由于我输入的速度很快,我最终会使用/home/m,并在我注意到之前继续输入无意义的字符。有可能,到那时我已经自动完成了我无意进入的目录。

因此,我必须经常观察自动完成功能正在做什么,而不是依赖于我输入的内容,而只是在点击 Tab 时检查建议的完成情况。

我也发现自己因为偶尔输入错误而进入错误的目录,然后很难达到一个级别 - 邪恶的自动完成不会让你用几个 Backspace 修复这种情况。

自动完成行为与删除 Tab 功能的这种交互完全扰乱了我的工作,以至于我决定提出这个问题。我期待着:

  1. 恢复旧功能
  2. 了解如何以有意义的方式使用自动填充功能,或
  3. 配置helm的 C-x C-f 表现得更像linux命令行
  4. 请帮忙。

2 个答案:

答案 0 :(得分:3)

如果你想开始使用它,这里有一些ido技巧。 如果helm更好,请告诉我,也许我会切换。 我很快就尝试了一次,但不喜欢它。

基本设置:

这将在 C-x C-f 上为您提供`ido-find-file。

(ido-mode)
(setq ido-enable-flex-matching t)

Smex设置:

https://github.com/nonsequitur/smex安装。

(require 'smex)
(global-set-key "\C-t" 'smex)

使用ido:

切换缓冲区
(global-set-key
 "η"
 (lambda()(interactive)
   (when (buffer-file-name)
     (save-buffer))
   (ido-switch-buffer)))

(global-set-key
 (kbd "C-η")
 (lambda()(interactive)
   (let ((ido-default-buffer-method 'other-window))
     (ido-switch-buffer))))

技巧:

;; 1
(add-hook 'dired-mode-hook
          (lambda()
            (define-key dired-mode-map "j" 'ido-find-file)))

(add-hook
 'ido-setup-hook
 (lambda()
   ;; 2
   (define-key ido-file-dir-completion-map "~"
     (lambda ()(interactive)
        (ido-set-current-directory "~/")
        (setq ido-exit 'refresh)
        (exit-minibuffer)))
   ;; 3
   (define-key ido-buffer-completion-map "η" 'ido-next-match)
   ;; 4
   (define-key ido-buffer-completion-map (kbd "C-p")
     'ido-fallback-command)
   ;; 5
   (define-key ido-completion-map (kbd "C-.") 'smex-find-function)
   (define-key ido-completion-map (kbd "C-,") 'smex-describe-function)))
  1. 来自dired的快速打开文件。
  2. 更快地移动到主目录一键(即~而不是~/)。
  3. 使用显示候选项的相同密钥循环缓冲区候选项(在Firefox中为la C-TAB。)
  4. 当你想要创建一个无文件缓冲区时,有用的回退(ido会尝试 选择现有缓冲区,除非你退回。)
  5. 用于跳转到功能定义/文档。

答案 1 :(得分:0)

如果您希望TAB完成目录和文件名,请将helm-execute-persistent-action映射到TAB键:

(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action)

另请参阅answer to "How can I change emacs helm-find-file default action[...]"