在 emacs 中编辑 shell 脚本时,我可以使用 bash 自动完成功能吗?
Can I use bash autocomplete when editing shell scripts in emacs?
在我的环境中,我设置了 bash 自动完成功能来完成许多令人惊奇的事情。
但是,当我在 emacs 中编辑 shell 脚本时,所有自动完成的魔法都消失了。
有什么方法可以让 emacs 在我编辑 shell 脚本时执行 bash 命令行自动完成?
我会接受要求我使用不同编辑器的答案,如果该编辑器在 Linux 系统上可用。我也会接受一个告诉我需要使用不同的 shell 自动完成的答案。
bash-completion.el 提供了一个正常 bash 完成的接口,它也可以扩展到正常 sh-mode
中工作,添加到您的 completion-at-point-functions
。这是它的工作原理,只需使用 sh-script
中的命令 sh-beginning-of-command
来确定当前完成候选者(如果需要,这可以扩展为处理更复杂的 shell 命令)。
(require 'sh-script) ;sh-beginning-of-command
(require 'bash-completion)
(defun my-sh-completion-at-point ()
(let ((end (point))
(beg (save-excursion (sh-beginning-of-command))))
(when (and beg (> end beg))
(bash-completion-dynamic-complete-nocomint beg end t))))
(defun my-sh-hook ()
(add-hook 'completion-at-point-functions #'my-sh-completion-at-point nil t))
(add-hook 'sh-mode-hook #'my-sh-hook)
在我的环境中,我设置了 bash 自动完成功能来完成许多令人惊奇的事情。 但是,当我在 emacs 中编辑 shell 脚本时,所有自动完成的魔法都消失了。
有什么方法可以让 emacs 在我编辑 shell 脚本时执行 bash 命令行自动完成?
我会接受要求我使用不同编辑器的答案,如果该编辑器在 Linux 系统上可用。我也会接受一个告诉我需要使用不同的 shell 自动完成的答案。
bash-completion.el 提供了一个正常 bash 完成的接口,它也可以扩展到正常 sh-mode
中工作,添加到您的 completion-at-point-functions
。这是它的工作原理,只需使用 sh-script
中的命令 sh-beginning-of-command
来确定当前完成候选者(如果需要,这可以扩展为处理更复杂的 shell 命令)。
(require 'sh-script) ;sh-beginning-of-command
(require 'bash-completion)
(defun my-sh-completion-at-point ()
(let ((end (point))
(beg (save-excursion (sh-beginning-of-command))))
(when (and beg (> end beg))
(bash-completion-dynamic-complete-nocomint beg end t))))
(defun my-sh-hook ()
(add-hook 'completion-at-point-functions #'my-sh-completion-at-point nil t))
(add-hook 'sh-mode-hook #'my-sh-hook)