提出了一个相关问题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 功能的这种交互完全扰乱了我的工作,以至于我决定提出这个问题。我期待着:
请帮忙。
答案 0 :(得分:3)
如果你想开始使用它,这里有一些ido
技巧。
如果helm
更好,请告诉我,也许我会切换。
我很快就尝试了一次,但不喜欢它。
这将在 C-x C-f 上为您提供`ido-find-file。
(ido-mode)
(setq ido-enable-flex-matching t)
从https://github.com/nonsequitur/smex安装。
(require 'smex)
(global-set-key "\C-t" 'smex)
(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)))
~
而不是~/
)。C-TAB
。)答案 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[...]"。