編集関連†
編集コマンド†
Key | command name | Operation |
C-SPC | set-mark-command | 選択の開始 |
M-P | set-mark-command | 選択の開始 |
C-w | kill-region | 選択した箇所をカット |
C-k | kill-line | 現在のカーソル位置から行末までをカット |
C-y | yank | 選択した箇所をヤンク(貼り付け) |
矩形編集コマンド†
- rectangle-mark-mode を使う。
Key | command name | Operation |
C-x SPC | rectangle-mark-mode | 矩形選択の開始 |
C-w | kill-region | 選択した箇所をカット |
M-w | kill-ring-save | 選択した箇所をコピー |
C-y | yank | 選択した箇所をヤンク(貼り付け) |
C-o | open-line | 矩形選択した箇所に空行を挿入 |
C-t <CHAR> | transpose-chars | 矩形選択した箇所を <CHAR> で置換 |
C-x r t <CHAR> | transpose-chars | 矩形選択した箇所を <CHAR> で置換 |
C-SPC → (region選択) → C-x SPC | | 選択したリージョンを矩形選択に変更 |
C-x r k | kill-rectangle | 矩形の切り取り |
C-x r y | yank-rectngle | 矩形の貼り付け |
C-x r N | rectangle-number-lines | 上から1で始まる連番を振る(数字は右詰めとなる) |
- 矩形編集は emacs24 あたりから使うことが出来るが、使うなら emacs25 以降の方が良い。理由は、入力内容がバッファにリアルタイムで反映される為(emacs24では、確定前の矩形編集入力はミニバッファにしか表示されない為、他の行とカラムを揃えたい場合に分かり難い)
使い方†
- 矩形編集モードに入る
C-x SPC
- 編集対象とする矩形をカーソルキーで選択する
- 編集したいコマンドを実行する
- 例:矩形選択した箇所を <CHAR> で置換
C-x r t <CHAR>
参考リンク†
対話置換†
- 検索と置換の開始
binding | command name | Operation |
M-% | query-replace | 検索して置換を開始 |
- 検索で見つかった文字列の置換
binding | Operation |
y | ハイライト中の文字列を、指定した文字列で置換して次を検索 |
n | ハイライト中の文字列を置換しないで次を検索 |
! | 全てのマッチした文字列を置換する |
q | 置換を終了する |
? | ヘルプを表示する |
一括置換(対話なし)†
binding | command | description |
| replace-string | 一括置換 |
| replace-regexp | 一括置換(正規表現版) |
一括検索&一括置換†
- moccur-edit を使う。
- 一括検索&一括置換の手順
- 検索する
- 検索開始
M-x: moccur-grep-find
- 検索対象ディレクトリを指定
Directory: <firectory>
- 検索キーワードとファイル名キーワードの入力
Input Regexp and FileMask: <keyword-for-grep> <file-name-mask>
- 検索結果を元に一括置換する為、編集モードに入る
r
- 置換する
M-%
- 置換した結果を保存する
C-x C-s
- 編集のキャンセル
C-x k
一括インデント†
- まず、バッファ全体を選択する
C-x h (mark-whole-buffer)
- 選択領域に対してインデントを実行する
C-M-\ (indent-region)
キーワードによる一括アライン(align-regex)†
- 代入式などが複数行にわたって並んでいるときに "=" などのキーワードで縦のアラインを揃える
- 範囲を選択
C-@
- コマンド実行する
M-x: align-regex
- アラインするキーワードを指定する
- 例
- 実行前
int aaa = 120;
double ad = 23.55;
std::string buff = format("test data = %d, ad = %f\n", aaa, ad);
- 実行後(アラインキーワードに "=" を指定した)
int aaa = 120;
double ad = 23.55;
std::string buff = format("test data = %d, ad = %f\n", aaa, ad);
コメントアウト/コメントアウト取り消し toggle†
- 下記にて、使用言語に合わせたコメントアウト/コメントアウト取り消しを行う。
- コメントアウトする領域を選択
C-@
- コメント/コメントアウト取り消し実行
M-;
- 各言語毎の挙動
言語 | コメントアウト文字 | 備考 |
C | /* */ で各行毎に括る・削除 | |
C++ | // を行頭に追加・削除 | |
Objective-C | // を行頭に追加・削除 | |
Java | // を行頭に追加・削除 | |
Pike | // を行頭に追加・削除 | |
python | # を行頭に追加・削除 | |
perl | # を行頭に追加・削除 | |
Tcl | # を行頭に追加・削除 | |
expect | # を行頭に追加・削除 | |
bash | # を行頭に追加・削除 | |
HTML | <!-- --> で各行毎に括る・削除 | |
PHP | <!-- --> で各行毎に括る・削除 | |
C# | 未対応 | |
Pascal | { } で各行毎に括る・削除 | |
elisp | ;; を行頭に追加・削除 | |
- この他、非言語の設定ファイルでも対応しているものがある:
項目 | コメントアウト文字 | 備考 |
.gitconfig | # を行頭に追加・削除 | |
編集以外の機能†
シェルコマンドの実行†
文字数を数える†
- 対象領域を選択し、
M-x: count-lines-region
または
M-=
とする。
- 行数と文字数が表示される。文字数は、全角も半角もそれぞれ1文字として扱われる。
行をウインドウ幅で折り返す・折り返さない†
ファイルを read-only で開く†
C-x C-r
HTML文書編集での自動補完†
- yahtmlを使う(yahtmlは、YaTeXに付属しているもの)。
- 参考リンク
現在の文字サイズの変更†
binding | command | description |
C-x C-- | text-scale-adjust | 文字サイズを小さくする |
C-x C-+ | text-scale-adjust | 文字サイズを大きくする |
C-x C-0 | text-scale-adjust | 文字サイズを初期値に戻す |
起動済みのemacs にファイルを渡す (emacsclient)†
キーバインド†
prefix の指針†
prefix-key | description |
C-x | システムコマンドが使用する |
C-c | ユーザが定義する。(拡張機能の実装ではこれはなるべく使用しないようにする) |
M-g | 行移動に関するキーバインドが定義される |
モードライン†
- モードラインの表示例
---------------------------------------------------------------------------------------------------------------------------
-UU-:----F1 color-moccur.el 16% (665,0) Git-master (ELisp/d GitGutter ARev FlyC:0|119 Develock ElDoc) [dmoccur-list]
---------------------------------------------------------------------------------------------------------------------------
- 文字コード
表記 | 文字コード | emacs での呼称 |
U | Unicode | utf-8, utf-16, utf-7, etc., |
S | Shift_JIS | sjis (shift_jis) |
J | JIS | iso-2022-jp, etc., |
E | EUC (JP) | euc-jp, euc-jis-2004, etc., |
1 | Latin-1 | latin-1 (iso-8859-1) |
- 改行コード
表記 | 改行コード | emacs での呼称 |
: | LF | unix |
(DOS) | CR+LF | dos |
(MAC) | CR | mac |
モードラインの書式設定†
format | description | remark |
%b | カレントバッファ名 | (buffer-name) の値 |
%f | ファイルのフルパス | (buffer-file-name) の値 |
%F | 選択中のフレーム | |
%* | バッファが readonly であれば "%", 変更されていれば "*", それ以外は "-" を表示する | |
%+ | バッファが readonly であっても変更されていれば "*", 変更されていなければ "%", それ以外は "-" を表示する | |
%& | バッファが readonly であっても変更されていれば "*", それ以外は "-" を表示する | |
%s | サブプロセスのステータス | (process-status) の値 |
%l | カーソルの行番号 | |
%c | カーソル一のカラム番号 | |
%i | バッファのファイルサイズ | 1byte 単位 |
%I | kB/MB/GB |
%p | ウインドウの上端より上にあるバッファ量の割合 | 先頭なら Top", 途中はパーセンテージ、終端なら "Bottom", 全て表示している場合は "All" と表示する |
%P | ウインドウの下端より下にあるバッファ量の割合 |
%n | ナローイング中であれば "Narrow" を表示する | |
%t | ファイルがテキストであれば "T", バイナリであれば "B" を表示する | 但し、OSによる |
%z | キーボード、端末、ファイルの文字コードを表示 | キーボードと端末は、ターミナル環境のみ |
%Z | 文字コードと改行コードを表示する | |
%e | エラーメッセージを表示する | |
%@ | ファイルがローカルホストであれば "-", リモートであれば "@" を表示する | |
%[ | 再帰編集のレベルを "[" の数で表示する。 "%]" も同様 | |
%% | "%" を表示 | |
%- | 無限に "-" を表示する | |
設定関連†
OS による処理分岐†
(when (eq system-type 'gnu/linux)
; Linux の場合
)
(when (eq system-type 'darwin)
; Mac の場合
)
(when (eq system-type 'windows-nt)
; Windows の場合
)
(when (eq system-type 'cygwin)
; Cygwin の場合
)
GUI / CUI による処理分岐†
- 変数 window-system を参照して分岐する。
- 変数 window-system には、 X Window-System の場合は値に "x" が入り、CUI の場合は定義されない。
- 分岐処理の例
フォント設定†
- Menu → "Options" → "Set Default Font..." でフォントを選択。
- Menu → "Options" → "Save Options" で設定を保存する。(この操作により、上で行ったフォント設定が ${HOME}/.emacs.d/init.el に保存される)
- フォントを "Noto Sans Mono" に設定する(${HOME}/.emacs/init.el の記載):
(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 "Noto Sans Mono" :foundry "GOOG" :slant normal :weight normal :height 113 :width normal)))))
which-function-mode†
- ソースコードを開いているとき、カーソル位置が何らかの関数内にある場合に、モードラインにその関数名を表示する機能。
- 設定するには、この機能を使いたいモード(C/C++/perl/java/etc.)の hook で以下のように呼び出す:
- 設定例:C/C++ (一旦 hook 用関数を定義してその中で呼び出すようにし、これを hook にセットしている)
; c系言語共通設定
(defun c-c++-mode-common-conf ()
"common settings for C/C++"
(if (which-function-mode nil) (which-function-mode)) ; ; 現在の関数名をモードラインに表示
)
(add-hook 'c-mode-common-hook 'c-c++-mode-common-conf)
- 設定例:Perl (hook 用関数の代わりにλ関数を使用し、それを hook にセットしている)
(setq perl-mode-hook
#'(lambda ()
(if (which-function-mode nil) (which-function-mode)) ; ; 現在の関数名をモードラインに表示
))
- 設定時の注意点
- 各モードの hook 以外のところ(例えばそれより前の段階で読み込まれる設定箇所)で呼んでも上手く機能しない。
lisp の場所を設定する†
- load-path : 指定したディレクトリを lisp を走査する場所として設定する
- normal-top-level-add-subdirs-to-load-path : load-path に登録されたディレクトリの下位ディレクトリも lisp を走査の対象に含める
タイトルバーの表示書式にファイル名を入れる†
(setq frame-title-format (format "emacs@%s : %%f" (system-name)))
文字色の変更†
- emacs 上で指定された文字色を変更する方法について。
- magit, xcscope などのパッケージで、文字色の制御を行っているものがある。これらは端末の background color などの関係で、場合によって却って見難くなることがある。
terminal 上で動作させる場合†
- 方法1
$ cat ${HOME}/.bashrc
alias emacsd='env TERM=xterm emacs --daemon'
alias emacs='emacsclient -t'
- 方法2
$ TERM=xterm-256color emacs -nw
- 方法3 init.elに以下を追加する
(defun terminal-init-gnome ()
"Terminal initialization function for gnome-terminal."
;; This is a dirty hack that I accidentally stumbled across:
;; initializing "rxvt" first and _then_ "xterm" seems
;; to make the colors work... although I have no idea why.
(tty-run-terminal-initialization (selected-frame) "rxvt")
(tty-run-terminal-initialization (selected-frame) "xterm"))
- 方法4 init.elに以下を追加する
(add-hook 'tty-setup-hook
'(lambda ()
(set-terminal-parameter nil 'background-mode 'dark)))
どの変数で色定義されているかを調べる†
- 対象となる文字列にカーソルを合わせた上で、以下を実行する:
M-x: describe-face
すると、ミニバッファに以下のように表示される:
Describe face (default `cscope-file-face'):
- ここで決定(return キーを押す)と、以下のように表示される:
Face: cscope-file-face (sample) (customize this face)
Documentation:
Face used to highlight file name in the *cscope* buffer.
Defined in `xcscope.el'.
Family: unspecified
Foundry: unspecified
Width: unspecified
Height: unspecified
Weight: unspecified
Slant: unspecified
Foreground: yellow
DistantForeground: unspecified
Background: unspecified
Underline: unspecified
Overline: unspecified
Strike-through: unspecified
Box: unspecified
Inverse: unspecified
Stipple: unspecified
Font: unspecified
Fontset: unspecified
Inherit: unspecified
色変更の定義†
- 上記を元に、以下のように設定してやれば、色を変えることが出来る
(set-face-foreground 'cscope-file-face "#d54e53") ; yellow → (RGB)=(0xd5,0x4e,0x53)
色設定†
wahel-theme†
- 暗色形テーマの一つ。
- 概ね良いのだが、以下の問題がある:
- which-function-mode でモード行に表示する関数名が暗い灰色背景に紺色文字の組み合わせとなり、見難い。
- C/C++ ソースコードの ediff で、コメント行同士の比較が見難くなる(特にBペイン)。
参考リンク†
{menu|tool}-barを消す†
(tool-bar-mode 0) ; tool bar を表示しない
(menu-bar-mode 0) ; menu bar を表示しない
(which-function-mode 1) ; 現在の関数名をモードラインに表示
行頭に行番号を表示する(モード行ではなく)†
モードラインに現在カーソルが位置している関数の関数名を表示する†
モードラインの現在時刻の表示†
- 現在時刻を表示する
(display-time)
- 24時間表示にする
(setq display-time-24hr-format t)
- 24時間制・秒も表示する
(setq display-time-interval 1)
(setq display-time-string-forms
; '((format "%s:%s:%s" 24-hours minutes seconds))
'((format "%s.%s.%s(%s) %s:%s:%s" day month year dayname 24-hours minutes seconds)) ; ヨーロッパ式
; '((format "%s/%s/%s(%s) %s:%s:%s" year month day dayname 24-hours minutes seconds)) ; 日本式
)
- 秒の表示は、フォーマットで秒まで指定しただけでは駄目で、表示を更新するインターバルの設定値 display-time-interval を1にする必要がある(この値は、デフォルト値が60、つまり1分となっている為)。
use-package†
- 設定を、統一的な分かり易い記述で書けるようにするライブラリ。
- use-package マクロを利用することで、ライブラリのロード、遅延ロード、設定を分かり易く記述出来る。
use-package 参考リンク†
Time-stamp†
; Time-stamp
; http://homepage.mac.com/zenitani/elisp-j.html#time-stamp
(require 'time-stamp)
(setq time-stamp-start "Last updated: <") ; 開始文字列の設定。通常は "Time-stamp: <>"
;; 日本語で日付を入れたくないのでlocaleをCにする
(defun time-stamp-with-locale-c ()
(let ((system-time-locale "C"))
(time-stamp)
nil))
(if (not (memq 'time-stamp-with-locale-c write-file-hooks))
(add-hook 'write-file-hooks 'time-stamp-with-locale-c))
; (setq time-stamp-format "%3a %3b %02d %02H:%02M:%02S %Z %:y")
(setq time-stamp-format "%04y/%02m/%02d %02H:%02M:%02S %Z") ; YYYY/MM/DD HH:MM:SS JST
isearch で、カーソルの位置にある単語を検索対象にする†
shell-mode で制御文字を処理する†
; shell-mode で制御文字を処理する。
(autoload 'ansi-color-for-comint-mode-on "ansi-color"
"Set `ansi-color-for-comint-mode' to t." t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
バックアップファイルを作らないようにする†
(setq make-backup-files nil) ; *.~ とかのバックアップファイルを作らない
(setq auto-save-default nil) ; .#* とかのバックアップファイルを作らない
選択領域を [DEL] で一気に消せるようにする†
; (setq delete-selection-mode t)
(delete-selection-mode)
scroll を1行単位にする†
(setq scroll-step 1)
分割した window のサイズを変える†
command | description | remark |
M-x: enlarge-window | 縦方向にサイズを大きくする | |
M-x: shrink-window | 縦方向にサイズを小さくする | |
M-x: enlarge-window-horizontally | 横方向にサイズを大きくする | |
M-x: shrink-window-horizontally | 横方向にサイズを小さくする | |
ウインドウ自動分割時の制御†
beep 音を消す†
- 嘗ては、以下の設定でカスタマイズすることが出来たが、emacs 24.4.1 では効かないようである。
今日の日付を挿入する†
(defun today()
(interactive)
(insert (format-time-string "%Y/%m/%d" (current-time))))
前のウインドウに戻る†
; XEmacsにはあるが、emacsにはない(!)
; http://matome.replore.com/index.php?title=Emacs_Lisp%E3%81%BE%E3%81%A8%E3%82%81
; xemacsに合わせて、関数名を backward-other-window に変更。
; (defun other-window-backward (&optional n)
(defun backward-other-window (&optional n)
"Select nth previous window."
(interactive "P")
(other-window (- (prefix-numeric-value n))))
検索時に大文字・小文字を区別するかしないかの設定†
(setq default-case-fold-search nil) ; 大文字・小文字を区別させる(〜emacs23.1)
(setq case-fold-search nil) ; 大文字・小文字を区別させる (emacs23.2〜)
- emacs23.2 以降では default-case-fold-search ではなく case-fold-search を使うように推奨されている
(see also M-x describe-variable case-fold-search)
ediff の control window を別ウインドウにしないようにする†
参考リンク†
カレンダーで日本の祝日を表示する†
- M-x: calendar で表示するカレンダーで日本の祝日を表示する方法。
- japanese-holidays.el を入手する
- 設定
- enmacs 起動時に cl-lib が見つからないと怒られた場合
helm†
入手先†
参考リンク†
emacs のローカルビルド†
- 最新のコードを取得する
- ビルドに使うパッケージをインストールする
# apt-get install autoconf xaw3dg-dev xaw3dg libjpeg-dev libpng-dev libgif-dev libtiff-dev texinfo libx11-xcb-dev liblcms2-dev gtk+-3.0-dev ncurses-dev
- ビルドする
$ ./configure
ここでエラーが出る場合、「こういうオプションをつけろ」というメッセージが出るので、それに従う。今回の環境では ''--with-gnutls=no'' が必要だった。
$ ./configure --with-gnutls=no
$ make
参考リンク†