Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

vimとemacsのコマンド比較

$
0
0

はじめに

普段 Linux サーバ管理作業では vim を使っていますが、手元の OS X 環境では emacs を使ってメモなどを取っています。が、やはり vim ほど emacs は使えていないのであのコマンドはどうやるんだっけ?というときの Vimmer 視点のメモ書きです。思いついた時々で更新します。

  • エディタにもともと備わっている機能についてのみのです
  • GUI はほとんど使わないので CUI で利用可能なコマンドです
  • あまりにも基本的すぎると思っているコマンド(C-sC-xC-cなど)はいまのところ載せていません
  • 以下のバージョンで確認しています
    • vim: 7.4.540
    • emacs: 24.3.1

コマンド比較表

標記について

  • C-aCtrlを押しながら aを押すことを意味します
  • M-vは多くの場合 ESCを押したあとに vを押すことを意味します。ESCC-[でも代用できます。
  • キーマップに割り当てられているコマンドについては括弧書きで併記します
    • vim: :sp[lit][]内は省略可能
    • emacs split-window-vertically
  • 省略可能な数引数については [count]と表記します

カーソル移動

文字や単語、ページの移動については vim、emacs ともに数引数が使えます。

コマンドvimemacs
行先頭0C-a (beginning-of-line)
行末尾$C-e (end-of-line)
1文字右lC-f (forward-char)
1文字左hC-b (backward-char)
1単語右※wM-f (forward-word)
1単語左bM-b (backward-word)
1行下jC-n (next-line)
1行上kC-p (previous-line)
1ページ下C-fC-v (scroll-up)
1ページ上C-bM-v (scroll-down)
バッファ先頭gg
1G
M-< (beginning-of-buffer)
バッファ末尾GM-> (end-of-buffer)
表示領域の中央HM-r (move-to-window-line)
カーソル行をウィンドウの最上部にz<Enter>C-l (recenter-top-bottom)
トグルなので2度押し
カーソル行をウィンドウの中央にz.C-l (recenter-top-bottom)
カーソルがウィンドウ下半分にあるとき

※単語右については、単語の区切りが少し異なります

  • vim: カーソル下の単語から、次の単語の先頭文字
  • emacs: 次の単語の先頭文字の左

編集

コマンドvimemacs
すべてを選択C-xh
矩形選択※C-v (で矩形ビジュアルモードを
開始して範囲を設定して)
(リージョンを設定して)
 置換(空白文字)r<SPACE>C-xrc (clear-rectangle)
 置換(任意文字)c任意文字<ESC>C-xrt任意文字<RET> (string-rectangle)
 挿入(空白文字)yPgvr<SPACE>
※選択範囲をコピー(y)して貼り付け(P)、
その範囲(gv)を空白で置換(r<SPACE>)
C-xro (open-rectangle)
 削除dC-xrd (delete-rectangle)
単語を小文字にveuM-l (downcase-word)
単語を大文字にveUM-u (upcase-word)

バッファ

コマンドvimemacs
保存:wC-xC-s (save-bufffer)
ファイルに保存:sav[e] {filename}C-xC-w (write-file)
でファイル名入力プロンプト
一覧:lsC-xC-b (list-buffers)
読み取り専用に:setl[ocal] roC-xC-q (read-only-mode)

※Emacs 24.4の矩形選択機能は試していないので分かりません

ウィンドウ

コマンドvimemacs
上下2分割C-ws (:sp[lit])C-x2 (split-window-vertically)
左右2分割C-wv (:vsp[lit])C-x3 (split-window-horizontally)
カレントを閉じるC-wc (:clo[se])C-x0 (delete-window)
カレント以外を閉じるC-wo (:on[ly])C-x1 (delete-other-windows)
別を選択C-ww
C-wC-w
C-xo (other-window)
別を選択2※左下上右
C-w{hjkl}
C-wC-{hjkl}
C-w{←↓↑→}
全てを同じ高さにするC-w=C-x+ (balance-windows)
大きすぎる場合は縮めるC-x- (shrink-window-if-larger-than-buffer)
高さを広げるC-w[count]+[count]C-x^ (enlarge-window)
高さを狭めるC-w[count]-[count]M-xshrink-window
幅を狭めるC-w[count]<[count]C-x{ (shrink-window-horizontally)
幅を広げるC-w[count]>[count]C-x} (enlarge-window-horizontally)

タブ(vim)/フレーム(emacs)

同じカテゴリにするには少し無理がありますが、複数のウィンドウをまとめたもの、ということで。

なおタブ(tabpage)は Vim 7.3 から使えます。

コマンドvimemacs
新規作成:tabnewC-x52 (make-frame-command)
カレントを閉じる:tabc[lose]C-x50 (delete-frame)
カレント以外を閉じる:tabo[nly]C-x51 (delete-other-frames)
別を選択gt (:tabn[ext])C-x5o (switch-to-buffer-other-frame)
別を選択2gT (:tabp[revious])
:tabfir[st] or :tabr[ewind]
:tabl[ast]
一覧:tabs

マクロ

コマンドvimemacs
記録開始q{レジスタ(a-z0-9")}C-x( (start-kbd-macro)
記録終了qC-x) (end-kbd-macro)
実行@{レジスタ(a-z0-9".=*+})C-xe (call-last-kbd-macro)
編集※Vimのマクロ編集C-xC-k (edit-kbd-macro)

マクロを実行する目的の多くはコマンドの連続実行なので、多くの場合は数引数をつけて実行します。

コマンドvimemacs
数引数[count]@レジスタM[count](digit-argument)→C-xe

Vimのマクロ編集

Vim のマクロはレジスタに記録された文字列に過ぎないので、一度それをバッファに展開して編集したあとにレジスタに登録し直します。

  • 追記する場合: q{レジスタの大文字(A-Z)}
  • 編集する場合: レジスタの内容をバッファに表示して編集し、レジスタに書き戻す
    1. :put {レジスタ(a-z)}
    2. バッファに貼り付けられたレジスタ内容を編集
    3. 0{レジスタ(a-z)}y$ (行の先頭から末尾までの内容を任意のレジスタにコピー)
    4. レジスタの内容を確認する場合は :reg[isters]

参考資料


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>