中年engineerの独り言 - crumbjp

LinuxとApacheの憂鬱

Emacs便利Tips集

前回emacsの設定に触れたので、ついでに僕の使っている便利関数達を紹介してみる。

折り返し表示

Emacs は長い行はデフォルト折り返し表示ですが
ソースコードの場合は、却って見難く成りがちです。

僕は [Ctrl+c l] で切り替えてます。

;; truncate line
(defun toggle-truncate-lines ()
  "toggle truncate lines"
  (interactive)
  (if truncate-lines
      (setq truncate-lines nil)
    (setq truncate-lines t))
  (recenter))
(global-set-key "\C-cl" 'toggle-truncate-lines)
大小文字区別検索

Emacs はデフォルト、大文字、小文字を区別なく検索しますが
区別したい場合もあります。

そんなときは [Ctrl+c s] で切り替え!

;; case fold
(defun toggle-case-fold-search ()
  "toggle case-fold-search"
  (interactive)
  (if case-fold-search
      (setq case-fold-search nil)
    (setq case-fold-search t))
  (recenter))
(global-set-key "\C-cs" 'toggle-case-fold-search)
ディレクト再帰grep

デフォルトのgrepは使い難い。

[Ctrl+c g] 後、<検索文字>
再帰検索です。

(defun rgrep()
  "Run rgrep"
  (interactive)
  (grep (read-string (format "[%s]$ " (replace-regexp-in-string "^[^ ]+ " "" (pwd))) "grep -n -I -s -r . -e ") )
)
(global-set-key (kbd "C-c g") 'rgrep)
ファイル内grep

こちらは現在のファイルだけをgrep

[Ctrl+x g] 後、<検索文字>

(defun fgrep()
  "Run fgrep"
  (interactive)
  (grep (read-string (format "[%s]$ " (replace-regexp-in-string "^[^ ]+ " "" (pwd))) (format "grep -n -I -s %s -e " (buffer-file-name) )))
)
(global-set-key (kbd "C-x g") 'fgrep)
grep後のジャンプ

Emacs は next-error , previous-error でコンパイルエラーの行へジャンプ出来るのですが

実は
 <ファイル名>:<行> ...
というフォーマットをパースしているだけです。

よってgrep結果もその形で出力してあげれば、飛べます!!

例によってショートカットをそれぞれ[f12]、[Meta+f12]に振ってます。

(global-set-key [f12] 'next-error)
(global-set-key (kbd "ESC <f12>") 'previous-error)

(global-set-key [\C-f12] 'next-error)
(global-set-key [\M-f12] 'previous-error)