5

这里提出了一个相关问题。但答案是要习惯 helm 中自动完成的新方式。我不能习惯它,这就是为什么。

说,我想打开一个文件/home/user/work/f.txt。我愿意C-x C-f,它把我带到当前目录,比如说/current/dir/。我点击Backspace并注意到自动完成不会让我 delete /。好的,用 . 关闭自动完成C-Backspace。然后终止该行C-a C-k并开始输入。请注意,自动完成功能不起作用,请将其重新打开C-Backspace。通常我会输入我知道可能是唯一的部分,例如/hom,然后点击Tab

不在这里。一旦我输入/ho,自动完成将其解析为/home/,但由于我输入速度很快,我最终/home/m会输入 ,并继续输入现在无意义的字符,直到我注意到它为止。很可能,到那时我已经自动完成到我无意去的目录中。

所以我必须经常观察自动完成在做什么,而不是依赖于我输入的内容,只在我点击时检查建议的完成Tab

我还发现自己由于偶尔的拼写错误而进入了错误的目录,然后很难升级——邪恶的自动完成不会让你用几个Backspaces 来解决这个问题。

自动完成行为和Tab功能删除的这种交互完全扰乱了我的工作,以至于我决定问这个问题。我正在寻找:

  1. 恢复旧功能
  2. 学习如何以有意义的方式使用自动完成功能,或者
  3. 将 helm 配置C-x C-f为更像 linux 命令行

请帮忙。

4

2 回答 2

3

ido如果您想开始使用它,这里有一些技巧。让我知道是否helm更好,也许我会切换。我很快尝试了一次,但不喜欢它。

基本设置:

这会给你 `ido-find-file on C-x C-f.

(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. 使用与显示候选对象相同的键循环缓冲候选对象(C-TABFirefox 中的 la la)。
  4. 当您想创建无文件缓冲区时,回退很有用(除非您回退,否则 ido 将尝试选择现有缓冲区)。
  5. 用于跳转到函数定义/文档。
于 2013-09-24T18:07:38.250 回答
1

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

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

另请参阅“如何更改 emacs helm-find-file 默认操作 [...]”的答案

于 2017-08-29T01:31:14.937 回答