## page was renamed from clear/slide/2011-04-09-slide ## page was renamed from clear/draft/seminar_slide ##master-page:SlideShowTemplate = = {{{#!wiki slidemargin slidetitle center large `vi`入門 }}} {{{#!wiki slidetitle center larger `clear` }}} = なにこれ = * VIsual editor * Unix系のOSなら大抵どこにでもあるテキストエディタ。ある程度使えるようになっておいて損はない * 「モード」の概念 * カーソルの移動やコマンドの実行 / 入力 * とっつき辛いが、慣れると素早い編集ができるように * viを元に生まれ、より多彩な機能を持つvim(Vi IMproved)が有名 * この講習でもvimを使います = はじめに = * これからviの基本的な操作を一通り説明していきますが、一回で覚えようとする必要はありません * 多分無理です * 是非とも身につけたいという方は、これが終わった後も積極的に使ってみることをおすすめします * 要は慣れの問題です それでは、はじめましょう = 起動 = とりあえず起動してみる {{{ vim }}} * 起動直後はコマンドモード。この状態ではテキストを入力できない = 終了 = とりあえず終了してみる {{{ :q }}} * `:`以降は画面下に表示される * 何かおかしい人はEscを2、3回叩いてから`:q` * こんなのが出たとき {{{ E37: No write since last change (add ! to override) }}} * 保存していない状態で終了しようとするとこれが出る * `:q!`と入力することで無視して終了 = カーソル移動 = * `hjkl`キー {{{ ^ j < h l > k v }}} * 矢印キーも使えるが、`hjkl`で動くようにしたほうがいい * 手をキーボードの中央から動かさずに操作できる * しばらく使ってみると手が覚える = カーソル移動の練習 = * 少し手を動かしてみよう * テキストを用意する * 次のように入力。途中で間違えたら`Esc`を押してやり直す {{{ 80iw }}} * "80i"の部分は表示されない。後ほど説明するが、これにより"w"を80回連続で入力している * `h`、`l`を適当に叩いて左右の移動に慣れよう * 行頭や行末にたどり着いても前の行や次の行には行かないことに注意 * 続いて、次のように入力 {{{ yyp }}} * 行が増える。そのまま`p`を何回か適当に叩いて行数を増やす * やはり後で説明するが、`yy`で1行コピー、`p`で次の行に貼り付け * `j`、`k`を使って上下に移動してみよう。慣れたら4つのキーであっちこっち移動してみよう = テキストを入力する = * コマンドモードから入力モードに移行する * `i` - カーソルがある文字の手前に挿入(insert) * 色々入力してみよう * 入力を終える(コマンドモードに戻る)には`Esc`キー * 入力中なのか、コマンドモードなのか分からないときはとにかくEscを何回か叩く = 一文字削除 = * 削除したい文字にカーソルを合わせて`x` * 先ほど入力したものを少し消してみよう = 保存 = * `:w <ファイル名>` - 書き込み。ファイル名を省略すると現在開いているファイル * `:x` - 変更があれば保存して終了 * `ZZ` - `:x`と同じだが、ファイル名の指定はできない = もう少し大きく移動する(1) = == 単語 == * `w` - 単語の頭をたどる * `e` - 単語の末尾をたどる * `b` - 単語の頭を'''逆向きに'''たどる 分かち書きしない日本語だといまいちだが、単に`h`とか`l`とか押しっぱなしにする手間は省ける。また、単語単位の移動は行をまたげる == 行 == * `0`(オーじゃなくてゼロ) - 行頭 * `^` - 空白を除いた先頭 * プログラムとか書くとき便利 * `$` - 行末 = もう少し大きく移動する(2) = == 画面 == * `Ctrl-f` - 1画面進む * `Ctrl-b` - 1画面戻る == 特定の行 == * `<行番号>G` * 単に`G`で末尾に飛ぶ * `:<行番号>`でもOK == 検索 == * `/<検索する語>` - 順方向(ファイルの後ろへ向かう)検索 * `?<検索する語>` - 逆方向(ファイルの先頭へ向かう)検索 * `n`で直前の検索を繰り返す。`N`で逆方向に繰り返す * `n`や`N`で進む向きは`/`と`?`とで逆になる = 大きく移動する練習 = * ファイルから読み込む {{{ :r /usr/include/stdio.h }}} * `:r`でファイルから読み込み * 対象のファイルの内容を読み込むだけで、元のファイルを編集する訳ではない * ファイルを「開く」場合は`:e` * `:set nu`で行番号を表示 * `set nonu`で消える * 色々な方法で移動してみよう = コマンドの基本形式 = {{{ <数値><動作><対象> }}} * <数値>は操作を繰り返す回数だったり行番号だったり。指定できるものとできないものがある。省略すると1回 * <動作>は削除、変更など * <対象>は単語(`w`)、行末まで(`$`)など = もう少し大きく削除する = == 単語単位 == * `dw`、`de`、`db` * さっきの`w`とか`e`に`d`(delete)がついただけ * カーソル位置から削除する == 行単位 == * `dd` - 1行ごっそり消える * `d0` - カーソル位置から行頭まで削除 * `d$` - カーソル位置から行末まで削除 = i以外の方法で入力する = == 追加 == * `a` - カーソルのある文字の後に追加(append) * `A` - 行末に追加 == 新しく行を作る == * `o`ですぐ下に新しい行をつくる * `O`ですぐ上に新しい行をつくる == 既存の文字列を置き換える == * `c` - 指定した範囲をテキストで置き換え * `cw`とか`c$`(`C`に同じ)みたいに指定 * `r` - 文字を文字で置き換え * `s` - 文字をテキストで置き換え = 貼り付け = * 削除したものはいったんバッファに保存される * `p`または`P`でバッファの内容を貼り付ける * `p`がカーソルの後ろ、`P`が前 * 「コピー」するには`y`を使う。コピーしたものは削除したもののようにバッファに保存される(ヤンク yankという) * `yy`または`Y`で一行コピー = コマンドの繰り返し、取り消し = == 繰り返し == * `.` - 直前の操作を繰り返す == 取り消し == * `u` - 実質何回でも可能 * `U` - 行に対する一切の変更を取り消す * `Ctrl-R` - 取り消しの取り消し = Visual mode(vim) = * 範囲選択に特化したモード * `v`で移行 * `Ctrl-v`で矩形選択 * 範囲を指定したら`d`で削除したり`c`や`s`で置き換えたり、`y`でヤンクしたり = これだけ覚えていれば大丈夫だ、問題ない = * 移動 - `hjkl`、`w`、`e`、`b`、`$`、`^`、`0` * 挿入 - `i`、`a` * 削除 - `x`、'dw'、'dd' * 検索 - `/`、`n`または'N'で繰り返し * 保存 - `:w` * 終了 - `:q`、`:q!`で変更を無視して終了 = これから先 = == チートシート == http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html * "vi sheet cheet"とかでgoogle先生に聞いてみると幸せになれるかも * 習熟度別に色々ある == vimtutor == vimにはチュートリアルがある {{{ vimtutor }}} または {{{ vim tutor }}} 一通りやってみると良い練習になる = おつかれさまでした =