TAGSを使ってみる。
exuberant-ctagsの導入
sudo aptitude install exuberant-ctags
.emacsの設定
とりあえず使うのは以下の2つだけ(他は覚えられません><)
- find-tag (M-.)
- pop-tag-mark (M-*)
使い難い位置だったので、keybindを変える。
(global-set-key "\C-c\C-k" 'find-tag) (global-set-key "\C-ck" 'pop-tag-mark)
jqueryのTAGSファイルを作る。
ctags --verbose -e jquery.js --languages=javascript > ctags.log
やっぱりanythingが使いたい
tag-findが使っている変数の名前が分からない><(なので、candidatesに何を指定すれば良いか分からない)
とりあえず、以下のようなrubyのコードを書いて代用。
#!/usr/bin/env ruby1.9 # -*- encoding: utf-8 -*- # "list_from_TAGS.rb" def f io io.inject([])do |re, line| re << $1 if line =~ /^\s*([\w\.$@]+?) =/ re end end def layout a '("' << a.join(%Q{" "}) << '")' end file = ARGV.shift File.open(file){ |rf| print layout(f(rf))}
たぶん、上手く動いていないところがありそう。
.emacsに以下を追加
(defun set-tags-file-name (path) (interactive "fpath:") (setq tags-file-name path)) (defun anything-find-tag () (interactive) (unless tags-file-name (call-interactively 'set-tags-file-name)) (let ((anything-sources (list anything-c-source-tags)) (anything))) (defvar anything-now-tags-file "unknown") (defvar anything-tags-source nil) (defvar anything-c-source-tags '((name . "Current TAGS context") (init . (lambda () (setq anything-tags-source (get-anything-tags-context)))) (candidates . (lambda () (unless (equal anything-now-tags-file tags-file-name) (setq anything-now-tags-file tags-file-name) (setq anything-tags-source (get-anything-tags-context))) anything-tags-source)) (action . (("Find-tags" . (lambda (candidates) (find-tag candidates))))))) (defun get-anything-tags-context () (let ((command (concat "list_from_TAGS.rb " (expand-file-name tags-file-name)))) (sort (car (read-from-string (shell-command-to-string command))) 'string-lessp))) ) (global-set-key "\C-c\C-k" 'anything-find-tag) ;;find-tagを止めてこちらに変更
後で調べる
- find-tagが見ている場所