2013/01/30

Emacs Tips


ハードウェア言語(Verilog,VHDL)を書くテキストエディタとしてEmacsを良く使う。
別に秀丸くんでも良いのだが、Linux OSで編集する場合も良くあるので昔からEmacsだ。
また、入力支援(verilogmode.elやVHDLはEmacsデフォルトで持つ)があり、もう離れられない。
最近はWindows 7(自分は32bit)上で普通にEmacs24.1がインストール出来るのでWindowsでも使える。(Mule for winやMeadowのころから使えていたのだが)
Windowsで使う場合は同時にMinGWなどのUnix計コマンドが使えるターミナルも一緒にインストールしておくと便利。

但し、Lisp言語が分からないので、カスタマイズには苦しむ。
特に、自動インデントやタブ辺りが未だに思い通りにならないのだが、、
まぁ、大半のエンジニアはググって真似しての繰り返し・・だと思います^^;

ちなみに、Windws環境では ESC- を Alt で代用出来る。(そもそも最近は ESCキーを使ったことない)
例えば、goto-lineコマンド M-g は Alt-g となる。(Altキーを押しながら g を押す)
注意するのは、M-% などで、% はシフトキーが必要なので、AltとShiftを押しながら5キー(シフトで%)を押す。当たり前ですが。

Emacsはとにかくショートカットキーが多く、忘れた場合などはヘルプでキーとコマンドの対応を確認出来る。

Help (このヘルプは情報量が多すぎてこれまた大変^^)
C-h ? ヘルプ
C-h b キーバインド表示(自分でバインドしたものも表示される)


これがあるからEmacsから離れられない一つにディレクトリエディタがある。
C-x d
  C    dired-do-copy
  ^    dired-up-directory
  d    dired-flag-file-deletion
  q    quit-window
  u    dired-unmark
  v    dired-view-file
  ~    dired-flag-backup-files


あとは、良く使うキーをさらっとメモしておくことにしよう・・(とても全部は書けないので)

■カーソル移動
C-a        move-beginning-of-line
C-e        move-end-of-line
M-b        backward-word
M-c        capitalize-word

C-v        scroll-up-command
M-v        scroll-down-command

M-<        beginning-of-buffer
M->        end-of-buffer

■矩形処理(まだ他にいっぱいあります)
C-x r k    kill-rectangle
C-x r y    yank-rectangle
C-x r c    clear-rectangle (空白にする)
C-x r o    open-rectangle  (空白を挿入)

■置換
M-%        query-replace
  → 対話形式になって、y,nで置換をするしない
     . で置換して終了
     ! で以降全てを置換 など

■キーボードマクロ
C-x (      kmacro-start-macro
C-x )      kmacro-end-macro

■繰り返し
C-u 80 -   universal-argument(80個の - で線を引く)

■ウィンドウ分割
C-x 0      delete-window
C-x 1      delete-other-windows
C-x 2      split-window-below
C-x 3      split-window-right
C-x 5 0    delete-frame
C-x 5 1    delete-other-frames
C-x 5 2    make-frame-command


ちなみに .emacs.d/init.el に追加したキーバインドは以下の通り
~~~~~~~~~~
・F9で行番号を左横に表示

  (global-set-key [f9] 'linum-mode)

・M-g で指定行へ移動

  (global-set-key "\M-g" 'goto-line)

・キーボードマクロ呼び出し (Shift+7キーで繰り返し実行)

  (global-set-key [?\C-'] 'call-last-kbd-macro)

・C-, と C-. を画面の1行スクロールにバインドする

  (global-set-key [?\C-,] 'scroll-up-one-line)
  (defun scroll-up-one-line () (interactive) (scroll-up 1))
  (global-set-key [?\C-.] 'scroll-down-one-line)
  (defun scroll-down-one-line () (interactive) (scroll-down 1))

・C-iでリージョンインデント

  (global-set-key "\C-i" 'indent-region)
~~~~~~~~~~


あと、Emacs環境設定ファイル init.el ファイルはこんな感じ(emacs24.1用)
;; 初期フレームの設定(コメントアウトすればデフォルト設定)
(setq default-frame-alist
      (append (list '(foreground-color . "black")
;           '(background-color . "lightgray")
            '(border-color . "black")
            '(mouse-color . "white")
            '(cursor-color . "black")
            '(width . 115)
            '(height . 56)
            '(top . 10)
            '(left . 100))
          default-frame-alist))

;;; ***************************************
;;;  使用言語のカスタマイズ
;;; ***************************************
;; タブではなくスペースを使う
(setq-default indent-tabs-mode nil)
(setq indent-line-function 'indent-relative-maybe)
;;インデント幅
(setq c-basic-offset 2)
;; タブ幅を 2 に設定
(setq-default tab-width 2)

;; Cの字下げ
(add-hook 'c-mode-common-hook
          '(lambda () (c-set-style "GNU") (setq c-basic-offset 4)))


;;; verilog modeの設定(VHDLやCはデフォルトでハイライトするためverilogのみ追加)
;; ダウンロード( http://www.verilog.com/ )した verilog-mode.el を Meadow\site-lisp にコピーする
(autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
(setq auto-mode-alist (cons  '("\\.v\\'" . verilog-mode) auto-mode-alist))
(setq auto-mode-alist (cons  '("\\.sv\\'" . verilog-mode) auto-mode-alist))
;; User customization for Verilog mode
(setq verilog-indent-level             2
      verilog-indent-level-module      2
      verilog-indent-level-declaration 2
      verilog-indent-level-behavioral  2
      verilog-indent-level-directive   2
      verilog-case-indent              2
      verilog-auto-newline             nil
      verilog-auto-indent-on-newline   nil
      verilog-tab-always-indent        t
      verilog-auto-endcomments         nil
      verilog-minimum-comment-distance 40
      verilog-indent-begin-after-if    t
      verilog-auto-lineup              '(case declaration))

;;; 自分のローカル Lisp ファイルを読み込む
(setq load-path (append' ("~/.elisp") load-path))

;; ツールバーを表示しない
(tool-bar-mode 0)

;;; 対応する括弧をハイライトする
(show-paren-mode t)

;;; カラム番号表示
(column-number-mode t)

;; 行番号を左横に表示(F9でトグルをキーバインドに追加)
(global-linum-mode 1)

;;; カーソルが画面から出たときにスクロールするステップ
(setq scroll-step 1)
 
;;; マウスホイールで3行スクロール(デフォルトで5行くらいなので小くする)
(defun scroll-down-with-lines () "" (interactive) (scroll-down 3))
(defun scroll-up-with-lines () "" (interactive) (scroll-up 3))
(global-set-key [wheel-up] 'scroll-down-with-lines)
(global-set-key [wheel-down] 'scroll-up-with-lines)

;;; モード行フォントを変える
;(set-face-font 'modeline "MS 明朝-12")

;;; @ 配色
; モードライン
(set-face-foreground  'modeline "White"  )
(set-face-background  'modeline "Black")
; 非アクティブ モードライン
(set-face-foreground  'mode-line-inactive "White")
(set-face-background  'mode-line-inactive "gray40")


;;; キーバインド
;; F9で行番号を左横に表示
(global-set-key [f9] 'linum-mode)
; M-g で指定行へ移動
(global-set-key "\M-g" 'goto-line)
; キーボードマクロ呼び出し(F3->***->F4,以降F4 に割り当てられているようだ)
(global-set-key [?\C-'] 'call-last-kbd-macro)
; C-, と C-. を画面の一行スクロールにバインドする
(global-set-key [?\C-,] 'scroll-up-one-line)
(defun scroll-up-one-line () (interactive) (scroll-up 1))
(global-set-key [?\C-.] 'scroll-down-one-line)
(defun scroll-down-one-line () (interactive) (scroll-down 1))
; C-iでリージョンインデント
(global-set-key "\C-i" 'indent-region)


;;; ***************************************
;;;  以下、Save Optionで自動追加
;;; ***************************************
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(default ((t (:family "Courier New" :foundry "outline" :slant normal :weight normal :height 90 :width normal)))))
(custom-set-variables)

0 件のコメント:

コメントを投稿