在obj-c(obj-c ++)模式下在emacs中的头/实现之间切换缓冲区

时间:2013-06-07 08:01:17

标签: objective-c emacs

如何在obj-c(c ++)模式下(即foo。[mM] {1,2}和foo之间使用标头/实现文件在缓冲区之间切换emacs。[hH] {1,2} )?是否可以为运行这样的宏指定标准的Xcode键盘快捷键(ctrl + cmd)?

3 个答案:

答案 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)