如何在obj-c(c ++)模式下(即foo。[mM] {1,2}和foo之间使用标头/实现文件在缓冲区之间切换emacs。[hH] {1,2} )?是否可以为运行这样的宏指定标准的Xcode键盘快捷键(ctrl + cmd)?
答案 0 :(得分:4)
Emacs内置支持使用ff-find-other-file从头文件跳转到实现文件:
(add-hook 'c-mode-common-hook
(lambda()
(local-set-key (kbd "C-c m d") 'ff-find-other-file)))
CC模式包括C,C ++,Java,Objective C等。
答案 1 :(得分:2)
看看this link。他描述了这个功能:
(defun objc-in-header-file ()
(let* ((filename (buffer-file-name))
(extension (car (last (split-string filename "\\.")))))
(string= "h" extension)))
(defun objc-jump-to-extension (extension)
(let* ((filename (buffer-file-name))
(file-components (append (butlast (split-string filename
"\\."))
(list extension))))
(find-file (mapconcat 'identity file-components "."))))
;;; Assumes that Header and Source file are in same directory
(defun objc-jump-between-header-source ()
(interactive)
(if (objc-in-header-file)
(objc-jump-to-extension "m")
(objc-jump-to-extension "h")))
(defun objc-mode-customizations ()
(define-key objc-mode-map (kbd "C-c t") 'objc-jump-between-header-source))
(add-hook 'objc-mode-hook 'objc-mode-customizations)
答案 2 :(得分:0)
除了C / C ++代码之外,还可以从CEDET的contrib扩展eassist-switch-h-cpp
函数来处理ObjC文件。更改很简单,将以下代码添加到init文件中:
(eval-after-load "eassist"
'(progn
(setq eassist-header-switches '(("h" . ("cpp" "cc" "c" "m"))
("hpp" . ("cpp" "cc"))
("cpp" . ("h" "hpp"))
("c" . ("h"))
("m" . ("h"))
("C" . ("H"))
("H" . ("C" "CPP" "CC"))
("cc" . ("h" "hpp"))))))
你可以调用eassist-swith-h-cpp
函数 - 它将处理头文件和实现文件之间的切换。并且您可以将此函数绑定到选定的键(C-c t
在给定的挂钩中):
(defun my/c-mode-cedet-hook ()
(local-set-key "\C-ct" 'eassist-switch-h-cpp))
(add-hook 'c-mode-common-hook 'my/c-mode-cedet-hook)