# TLCL 輪読会 ### 12 – A Gentle Introduction to vi 2022/10/18 [@kdnakt](https://twitter.com/kdnakt) --- ## 今日の範囲 ### 12 – A Gentle Introduction to vi - Why We Should Learn vi - A Little Background - Editing Modes - Moving the Cursor Around - Basic Editing - Search-and-Replace - Editing Multiple Files - Saving Our Work --- ### vi ("vee eye") - Unixのコアプログラムの1つ - テキストエディタ - UIが難しい - 達人のキーボード捌きは芸術的 - 本章では基礎を扱う --- #### Why We Should Learn vi p.141 - viはGUIなしでも使える - viは軽量で高速 - 高速タイピング向けデザイン --- #### A Little Background p.142 - 1976年UCバークレイ校のBill Joyが開発 - 後にSun Microsystemsに入社 - "visual"に由来 - :no_good: ラインエディタ - :no_good: プリンター・ターミナル - ラインエディタexを内包 - Linuxディストロにはviでなくvimが同梱 - Bram Moolenaarが開発 - "vi imporoved" - 以降、viと書くが実態はvim ---- ##### Starting and Stopping vi p.142 - 起動する ``` $ vi ``` - 終了する ``` // コロンもコマンドの一部 :q // 強制終了(未保存で終了できない時など) :q! ``` ---- ##### Compatibility Mode p.143 - 通常デフォルトはviに近い動作モード - vimとしての高度なモードも利用可能 ``` // .bashrcファイル alias vi='vim' // .vimrcファイル set nocp ``` - ディストリビューションによっては最小機能のみ - フル機能バージョンをインストール可能 --- #### Editing Modes p.144 - 新規ファイルを作成する ``` // 存在しないファイル名を渡す $ vi foo.txt ``` - ティルダ:テキストなしの行を示す - viにはモードがある - 起動時はコマンドモード ---- ##### Entering Insert Mode p.145 - ファイルを編集するには入力モードに切り替える - iキーを押すと下部に次の表示 ``` -- INSERT -- ``` - コマンドモードに戻る:Escキー ---- ##### Saving Our Work p.145 - 保存にはコマンドモードでexのコマンドを利用 - :キー+コマンド ``` // 修正ファイルを書き込む(最後にエンター :w // 画面下部に以下のような表示 "foo.txt" [New] 1L, 46C written ``` --- #### Moving the Cursor Around p.146 - 移動コマンドのいくつかはlessと共通 |Key |カーソル移動| |-----|--------| |l,→|右に1文字 | |h,←|左に1文字 | |j,↓|下に1文字| |k,↑|上に1文字| - ※初期は矢印キーのない端末もあった ---- |Key |カーソル移動| |-----|--------| |0|現在行の最初| |^|現在行の最初の非空白文字| |$|現在行の最後| |w|次の単語の最初、または句読点| |W|次の単語の最初、句読点は無視| |b|前の単語の最初、または句読点| |B|前の単語の最初、句読点は無視| ---- |Key |カーソル移動| |-----|--------| |Ctrl-f|1ページ下| |Ctrl-b|1ページ上| |数字G|指定の行数へ| |G|ファイルの最終行| - ※数字とキーを組み合わせることも可 - 例:5j=5文字下 --- #### Basic Editing p.147 - uコマンド:最後の変更をundo ---- ##### Appending Text p.147 - aコマンド:テキストをappendする - Aコマンド:テキストを行末にappend ---- ##### Opening a Line p.148 - oコマンド:現在行の下に行を追加 - Oコマンド:現在行の上に行を追加 ---- ##### Deleting Text p.149 - xコマンド:カーソル位置の1文字削除 - 例)3x:3文字削除 - ddコマンド:現在行を削除 - 例)5dd:現在行から5行削除 ---- ##### 削除コマンドつづき - dWコマンド:現在位置から次の単語の開始まで削除 - d$コマンド:現在行のカーソル以降を削除 - d0コマンド:現在行のカーソル以前を削除 - d^コマンド:カーソルから現在行の次の非空白文字まで削除 - dGコマンド:現在行からファイル末尾まで削除 - d20Gコマンド:現在行から20行削除 ---- ##### Cutting, Copying, and Pasting Text p.150 - dコマンド:削除だけでなく「切り取り」も - pコマンドで1行下に貼り付け - Pコマンドで1行上に貼り付け |Key |コピー対象| |-----|--------| |yy|現在行| |5yy|現在行と次の4行| ---- |Key |コピー対象| |-----|--------| |yW|現在位置から次の単語の開始まで| |y$|現在位置から現在行の終わりまで| |y0|現在位置から現在行の最初まで| |y^|現在位置から行内の最初の非空白文字まで| |yG|現在行からファイル末尾まで| |y20G|現在行から20行目まで| ---- ##### Joining Lines p.152 - 行末に移動して改行コードを削除することはできない - Jコマンドで可能 - ※jコマンドは移動用 --- #### Search-and-Replace p.152 - 検索してカーソル移動もできる - 1行でもファイル全体でも可 - 置換もできる ---- ##### Searching Within a Line p.152 - fコマンド:行内検索 - faと入力:aの文字を検索 ---- ##### Searching the Entire File p.152 - /コマンド:単語の出現場所へカーソル移動 - lessと同じ - nコマンドで次の検索結果へ - 正規表現での検索も可能 - 詳細は19章で ---- ##### Global Search-and-Replace p.153 ``` // substitutionと呼ばれるexのコマンド // Lineをlineに置換 :%s/Line/line/g ``` - 操作範囲の指定 - %:ファイル全体 - 1,5:1-5行目 - 1,$:1行目からファイル末尾まで - なし:現在行 - s:substitution - /Line/line/:置換前後の文字列 - g:出現箇所全てを置換 - c:置換時にユーザー確認 --- #### Editing Multiple Files p.155 - 複数ファイルの同時編集も可能 ``` $ vi file1 file2 file3 ... ``` ---- ##### Switching Between Files p.156 - :bnコマンド:次のファイルへ - :bfコマンド:前のファイルへ - :buffersコマンド:編集中ファイル一覧 - :buffer 数字コマンドでファイル表示 ---- ##### Opening Additional Files for Editing p.157 - 現在のセッションにファイルを追加 ``` // viを起動 $ vi foo.txt // 2つ目のファイルを追加 :e bar.txt ``` ---- ##### Copying Content from One File into Another p.157 - yyコマンドでコピー - :buffer 2で2番目のファイルを開く - pコマンドで貼り付け ---- ##### Inserting an Entire File into Another p.158 - カーソル位置に別ファイルを読み込む ``` :r ファイル名 ``` --- #### Saving Our Work p.159 - :wコマンドだけではない - コマンドモードでZZ:保存してviを終了 - :wqコマンドでも同様 - :wコマンドでファイル名を指定可能 ``` $ vi foo.txt // foo1.txtとして別名で保存 :w foo1.txt // 注意:保存後も編集するのは元のfoo.txt ``` --- #### Summing Up p.160 - これで典型的なLinuxシステムのメンテは可能 - vim習得は長期的にお得 - lessなど他のプログラムに影響 --- #### Further Reading p.160 - [Vim, with Vigor](http://linuxcommand.org/lc3_adv_vimvigor.php) - [Learning The vi Editor](http://en.wikibooks.org/wiki/Vi) - [The Vim Book](ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf.)
{"metaMigratedAt":"2023-06-17T11:59:18.227Z","metaMigratedFrom":"YAML","title":"TLCL 輪読会","breaks":true,"slideOptions":"{\"transition\":\"slide\"}","contributors":"[{\"id\":\"df36d0f0-b67e-41ac-96b3-f3988326d230\",\"add\":4727,\"del\":136}]"}
    504 views