【发布时间】:2014-12-15 08:47:47
【问题描述】:
我是一个 VIM 人 - 但是 evil-mode 让我能够高效地使用 Emacs 进行我的 Scala 开发,而且它做得非常好,以至于我有点着迷......我想自定义我喜欢的环境,所以我例如将这些添加到我的.emacs:
(define-key evil-normal-state-map (kbd "<f7>") 'ensime-typecheck-all)
(define-key evil-normal-state-map (kbd "C-]") 'ensime-edit-definition)
在 evil-normal-mode 中,第一行允许我通过按 F7 对我的 Scala 代码进行类型检查,而第二行通过肌肉记忆Ctrl-](用于VIM中基于标签的导航)。
我唯一的问题是到目前为止我所做的是一个“全局”分配 - 如果我打开一个 Python 文件,我希望 F7 做不同的事情(pyflakes 或 pylint)。如何根据我正在查看的缓冲区中当前打开的文件类型为同一个键分配不同的操作?
如果有帮助,请在我的 .vimrc 中通过以下部分完成此操作:
au BufNewFile,BufRead *.ml call SetupOCamlEnviron()
function! SetupOCamlEnviron()
se shiftwidth=2
"
" Remap F7 to make if the file is an .ml one
"
noremap <buffer> <special> <F7> :make<CR>
noremap! <buffer> <special> <F7> <ESC>:make<CR>
"
" Thanks to Merlin
"
noremap <buffer> <silent> <F6> :SyntasticCheck<CR>
noremap! <buffer> <silent> <F6> <ESC>:SyntasticCheck<CR>
inoremap <buffer> <C-Space> <C-x><C-o>
noremap <buffer> <C-]> :Locate<CR>
inoremap <buffer> <C-]> <ESC>:Locate<CR>
endfunction
在 Emacs/evil 中如何做这种事情?
编辑:为了寻找一种方法来做到这一点,我意识到我可以在正常模式下按 F7 时调度不同的代码 - 所以我写了这个 Emacs lisp:
(defun current-buffer-extension ()
(if (stringp (buffer-file-name))
(file-name-extension buffer-file-name)
"Unknown"))
(defun handle-f7 ()
(interactive)
(if (string= (current-buffer-extension) "scala")
(ensime-typecheck-all)))
(define-key evil-normal-state-map (kbd "<f7>") 'handle-f7)
...随着我对 Emacs 的了解更多,可以通过添加基于文件扩展名的操作来扩展其他工具调用。
作为 Emacs 的新手,我愿意接受建议...
我在正确的轨道上吗?有没有更好的方法来做我想做的事?挂钩邪恶正常模式的击键是否违反了某些原则?
【问题讨论】:
标签: emacs