| 環境 | : | Vine 4.1 | |
| Web 1 | : | Vim the editor | |
| Web 2 | : | The Vi Lovers Home Page | |
| Web 3 | : | viを使い倒そう | |
| Web 4 | : | JVim3非公式ガイド | |
| Web 5 | : | vim日本語マニュアル | |
| Web 6 | : | 名無しのVIM使い | |
| Web 7 | : | 見えない文字を見えるようにする | |
| Web 8 | : | bvi |
DOS/Windows 系( 以後DOS 系と呼称します )からUnix系に移行して、最も戸惑うのがeditorではないでしょうか。実は、vim は他のeditorとは動作が異なるのです。所が、この動作の違いについて説明をせずに、いきなりコマンドの説明から始まるので、結局vim を理解出来ないのです。そこで、ここではユーザが戸惑う部分について説明します。
vim 起動直後の問題
vim を使用して最初に戸惑うのが、この起動後の状態でしょう。この状態を説明する前に、一般的なeditorの動作を確認してみましょう。一般的なeditorは、
起動直後は、[ インサートモード ]になっていて、そのまま自由に記述出来る。
必要に応じて、Ctrlキー等を使用して検索等の[ コマンドモード ]( ウィンドウ )を呼び出す。
と、なっています。これに対してvim は、
起動直後は、[ コマンドモード ]になっている。
必要に応じて、[ インサートモード ]を呼び出して入力を行う。
と、なっていて、動作の基点が逆になっているのです。
つまり、一般的なeditorでは、検索機能を呼び出した時にウィンドウが表示され、キーワードの入力待ちに成るわけですが、このキーワードの入力ウィンドウがediter起動直後に最初から開いている状態が、vim の状態と言えば近いでしょうか。
この、動作基点が逆になっているという事を理解すれば、vim はそれほど難しくは有りません。
そして、コマンドモードが基点となっているがゆえに、vim はコマンドの連続操作がストレスなく行えるという、他のEditerに無い特性をもっているのです。
範囲指定の方法
次に、とまどうのは範囲指定でしょうか。vim にはビジュアルモードという他のEditerと同等の機能が有るので問題は有りません。所が何故か、この機能についての説明が成されていない事が多く、これもvim の敷居を高くしている原因の一つです。
ファイル選択
Linux になれれば必ずしも必須と言えないかもしれませんが、vim にもファイラ機能は有ります。vim はディフォルトでは編集途中での切替えは出来ませんが、これも編集途中で切替え出来るように変更可能です。
Escキーの操作が面倒
最後は[ Esc ] キーでしょうか、インサートモードからコマンドモードに戻る時に[ Esc ] キーを使用するわけですが、これが押しづらい... 。これには対策が有り、[ alt-j,k,l, ctrl-F, ii, hh, jj, kk, ll ] 等のキーに[ Esc ] を割り当ててしまえば良いのです。
さて、実際のvim の使用感ですが、なれると一般的なeditorよりも便利というのが正直な感想です。特に入力後の修正は、大量のコマンド操作を連続してストレス無く行えるので、比較にならないくらい便利です。コマンドも他のEditerよりも覚えやすい印象を受けました。他のEditerが初心者を意識する余り、中級者レベルどまりなのと異なり、vim は上級者向けという所でしょうか。
コマンドモード
vim起動直後がこのモードです。検索・削除・コピー等の各種コマンドを使用するモードです。
インサートモード
プログラムや文章を入力するモードです。
exモード
コマンドモードで[ : ] を入力した時に切り替わるモードで、ラインエディタの名残です。
ビジュアルモード
領域を選択し操作する為のモードです。
イージモード
インサートモードを基点として、一般的なEditerと同じように動作するモードです。ただ、このモードではコマンドの連続操作が出来ないので、vim を使用する意味が有りません。
[ $ ]の意味はモードにより異なります。
コマンドモード = 行末
exモード = ファイルの末尾
Mode
特に指定が無い場合は、コマンドモードのコマンドです。その他は、以下のようになります。
V = ビジュアルモードでも使用出来るコマンド
: = exモードのコマンド。使用時に[ : ]も入力する必要が有ります。
Num
コマンド前の数値設定の有無について記載しています。
n : 数値( 複数設定数場合は、[ , ]で区切ります。)
"n : n 番目のバッファを使用する。
"x : 名称x のバッファを使用する。( x は a〜zのアルファベット )
Command
コマンドです。
Second
第2コマンドや付加機能の有無について記載しています。以下以外は、記載して有る文字等をそのまま入力してください。
<enter> : enterキーを入力します。
directoryName : ディレクトリ名を入力します。
fileName : ファイル名を入力します。
Keyword : キーワードを入力します。
m : 移動コマンドを意味します。
x : 適当な文字を1 文字入力する事を意味します。
Spell
コマンドの元に成ったと思われる単語のスペルを記載していますが、未確認です。従って、ハズレも有るかと... 参考程度に考えて下さい。
Explanation
コマンドの機能説明です。
括弧無し : コマンドのみの説明
( ) : コマンドの前に数値を指定した場合の動作。( Num )
[ ] : コマンドの次に設定値を指定した場合の動作。( Second )
コマンドモードのコマンドについて説明していますが、一部exモードのコマンドも有ります。
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| n | . | 最後のコマンドを1 回実行。但し移動コマンドは含まない | |||
| n | ~ | 大文字←→小文字変換 | |||
| ga | 文字コードを表示 | ||||
| J | Join | 行の連結 | |||
| ^L | Load | 再表示 | |||
| : | ^P | 前回使用したex コマンドの表示 | |||
| : | ^N | ^Pの表示を1つ前に戻す | |||
| : | chdir directory | change directory | カレントディレクトリの変更 | ||
| : | dis | display | バッフアの表示 |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| : | e | ! | [ ファイル読込時へ戻す ] | ||
| ZZ | 書込後終了 | ||||
| : | q | ! | Quit | 終了[ 強制終了 ] | |
| : | n,n2 | w | q fileName | Write | 現在のファイルを書込(書込み行範囲指定)[ 書込後終了 指定ファイル名にてセーブ ] |
| : | wa | q | Write all | 全部のファイルを書き込み[ 書き込み後終了 ] | |
| : | x | 書込後終了。但し、書き込みはファイル変更時のみ |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| : | ls | 編集対象ファイル一覧の表示 | |||
| : | files | 編集対象ファイル一覧の表示 | |||
| : | r | fileName | Read | [ 次行に指定したファイルの内容を読み込む ] | |
| : | e | fileName # #n | Edit | [ 指定したファイルを開く 次のファイルへ 指定番号のファイルへ ] | |
| : | b | fileName n | Buffer | [ 指定名称のファイルへ 指定番号のファイルへ ] tabに依る補間有り | |
| : | bn | Buffer Next | 次のファイルへ | ||
| : | bp | Buffer Previous | 前のファイルへ | ||
| : | bm | Buffer Modified | 次の編集中のファイルへ | ||
| : | bd | ! n !n | Buffer Delete | ファイルをクローズ[ 強制 指定番号のファイル 指定ファイルを強制 ] | |
| : | n | # | [ 次のファイルへ ] | ||
| n | ^^ | # | ファイル切替え( 指定番号のファイルへ ) | ||
| : | E | directoryName | Explore | ファイラを起動する |
filerのコマンド
| Command | Spell | explanation |
|---|---|---|
| <enter> | カーソル下のファイルorディレクトリを開く | |
| - | 一つ上のディレクトリへ移動 | |
| o | Open | カーソル下のファイルorディレクトリを別のウィンドウで開く |
| p | Preview | カーソル下のファイルorディレクトリをプレビューウィンドウで開く |
| s | Sort | ファイルのソート、ソート方法は順次切替 |
| r | Reverse | 逆ソート |
| i | Information | ファイルとディレクトリの詳細表示 |
| x | カーソル下のファイルを指定アプリで開く |
※ プレビューウィンドウは[ :pclose ]で、閉じます。
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| n | a | Append | カーソルの後ろで、入力モードへ(入力された内容をn 回繰り返す ) | ||
| n | A | Append | 行の末尾で、入力モードへ (入力された内容をn 回繰り返す ) | ||
| n | i | Insert | カーソル位置で、入力モードへ (入力された内容をn 回繰り返す ) | ||
| n | I | Insert | 行先頭一文字目で、入力モードへ(入力された内容をn 回繰り返す ) | ||
| o | Open | カーソル位置下に空行を作成して、入力モードへ | |||
| O | Open | カーソル位置上に空行を作成して、入力モードへ | |||
| V | n | r | Replace | カーソル位置の1 文字置換。( r に続いて入力した1 文字とn 文字置換 ) | |
| V | R | Replace | カーソル位置から行末まで上書きで入力モードへ | ||
| V | n | c | m / ? | change | [ カーソル位置から指定した範囲を削除後、入力モードへ。 ] |
| n | cc | change | 1 行削除後、入力モードへ( n 行削除 ) | ||
| V | n | C | change | C$と同じ | |
| V | n | s | Substitute | 1 文字削除後、入力モードへ( n 文字削除 ) | |
| V | n | S | Substitute | 1 行削除後、入力モードへ ( n 行削除 ) |
[ 0123456789 ]を10回入力したい。
以下のように、[ 10a ] と入力するとインサートモードに成るので、[ 01234567898 ]を入力後、[ Esc ] キーを押してコマンドモードに戻ると、自動的に10回分展開されます。
10a123456789<Esc>
| Command | Explanation |
|---|---|
| <esc> | |
| ^[ | |
| ^3 | |
| ^C | 環境依存 |
| ^F | 設定してある場合 |
| <alt-j> | 設定してある場合 |
| <alt-k> | 設定してある場合 |
| <alt-l> | 設定してある場合 |
| ii | 設定してある場合 |
| hh | 設定してある場合 |
| jj | 設定してある場合 |
| kk | 設定してある場合 |
| ll | 設定してある場合 |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| V | n | k | 上へ1 文字移動( n 文字移動 ) | ||
| V | n | j | 下へ1 文字移動( n 文字移動 ) | ||
| V | n | h | 左へ1 文字移動( n 文字移動 ) | ||
| V | n | l | 右へ1 文字移動( n 文字移動 ) | ||
| V | n | <backSpace> | h と同じ L | ||
| V | n | <space> | l と同じ | ||
| V | f | x | Find | [ 行内で、次の文字xまで移動 ] | |
| V | F | x | Find | [ 行内で、前の文字xまで移動 ] | |
| V | t | x | [ 行内で、次の文字xの前の文字へ移動 ] | ||
| V | T | x | [ 行内で、前の文字xの後ろの文字へ移動 ] | ||
| V | ; | 前回と同じ方向へ | |||
| V | , | 前回と逆の方向へ |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| V | n | w | Word | 右へ1 単語移動( n 単語移動 ) | |
| V | n | W | word | 句読点を無視して、右へ1 単語移動( n 単語移動 ) | |
| V | n | e | End | 右単語末尾へ( n 単語末尾へ ) | |
| V | n | E | End | 句読点を無視して、右単語末尾へ( n 単語末尾へ ) | |
| V | n | b | Back | 左へ1 単語移動( n 単語移動 ) | |
| V | n | B | Back | 句読点を無視して、左へn1単語移動( n 単語移動 ) | |
| V | n | % | 対応する括弧へ( ファイル全体を100%として指定%位置へ ) |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| V | n | | | 行頭へ( n 番目の文字へ移動 ) | ||
| V | ^ | 行頭1 文字目へ | |||
| V | 0 | 行頭へ | |||
| V | n | $ | 行末へ( n 行目1 文字目へ ) |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| V | n | - | 前行先頭の1 文字目へ( n 行目 ) | ||
| V | n | + | 次行先頭の1 文字目へ( n 行目 ) | ||
| V | n | <enter> | + と同じ | ||
| V | n | gg | Go | ファイル先頭行へ( n行目へ ) | |
| V | n | G | Go | ファイル最終行へ( n行目へ ) | |
| V | ^G | 現在行の行番号を表示 | |||
| : | .= | ^Gと同じ | |||
| : | = | 行の総数を表示 | |||
| V | n | H | Home | 画面最上行の行頭1 文字目へ( 最上行からn 行目へ ) | |
| V | M | Middle | 画面中央行の行頭1 文字目へ | ||
| V | n | L | Lower | 画面最下行の行頭1 文字目へ( 最下行からn 行戻った行へ ) |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| V | n | ( | 文の先頭1 文字目へ ( n 文前へ ) | ||
| V | n | ) | 次の文の先頭1 文字目へ( n 文目へ ) | ||
| V | n | { | 段落の先頭へ ( n 段落前へ ) | ||
| V | n | } | 次の段落の先頭へ( n 段落目へ ) | ||
| V | n | [[ | セクション先頭1 文字目へ ( n セクション前へ ) | ||
| V | n | ]] | 次セクション先頭1 文字目へ( n セクション目へ ) |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| V | ^F | 1 画面分次へ移動後、行頭1 文字目へ | |||
| V | ^B | 1 画面分前へ移動後、行頭1 文字目へ | |||
| V | ^D | 1/2 画面分次へ移動後、行頭1 文字目へ | |||
| V | ^U | 1/2 画面分前へ移動後、行頭1 文字目へ | |||
| V | n | z<enter> | 現在行を画面最上行にスクロール後、行頭1 文字目へ( n行目を最上行へ ) | ||
| V | z. | 現在行を画面中央にスクロール後、行頭1 文字目へ | |||
| V | z- | 現在行を画面最下行にスクロール後、行頭1 文字目へ | |||
| V | n | ^E | 1 行上にスクロール | ||
| V | n | ^Y | 1 行下へスクロール |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| n | x | Trans | 1 文字削除( n 文字削除 ) | ||
| n | X | Trans | 左1 文字削除( n 文字削除 ) | ||
| V | x | Trans | 指定範囲を削除 | ||
| V | n "n "x | d | m / ? | Delete | [ カーソル位置から指定した範囲を削除。 |
| n "n "x | dd | Delete | 1 行削除( n 行削除・削除した内容をバッファ"n番目へ・バッファ"x文字目へ:大文字なら追加 ) | ||
| V | n | D | Delete | D$と同じ | |
| n | u | Undo | 最後のコマンドの取消( 最後からn 回前まで取消 ) | ||
| U | Undo | 変更後行移動をしていない場合に限り、その行を元に戻す。 | |||
| n | ^R | Redo | 取消の取消( n 回前までの取消を取り消す ) |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| V | n | y | m | Yank | [ カーソル位置から指定した範囲をバファへコピー ] |
| n "n "x | yy | Yank | 1 行コピー( n 行コピー・バッファn 番目へ・バッフアx文字目へ:大文字なら追加) | ||
| V | n | Y | Yank | yyと同じ。Yの形式が他のコマンドと異なるので注意。 |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| V | n "n "x | p | Put | バッファ内容をカーソル後に挿入( n 回挿入 "n番のバッファから "x文字のバッファから ) | |
| V | n | P | Put | バッファの内容をカーソルの前に挿入する( n 回挿入 ) | |
| V | n | < | 現行を左へシフト | ||
| V | n | > | 現行を右へシフト |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| / | <enter> keyword<enter> | 順方向へ検索{keywordが無い時は再検索} | |||
| ? | <enter> keyword<enter> | 逆方向へ検索{keywordが無い時は再検索} | |||
| * | カーソル位置の単語で検索 | ||||
| g* | 部分的に一致する単語も検索 | ||||
| # | カーソル位置の単語で前方検索 | ||||
| g# | 部分的に一致する単語も前方検索 | ||||
| n | Next | 前回と同じ方向へ再検索 | |||
| N | Next | 前回と逆の方向へ再検索 | |||
| : | noh | 一時的に検索結果のハイライトを消す。次検索時に復活。 |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| : | n,n2 % | s/old/new/g | c | 行内置換( 指定行範囲を置換 全範囲を置換 )[ 確認有り ] | |
| : | g/keyword/s/old/new/g | c | 指定キーワードを有する行のold を new に置換[ 確認有り ] |
※ [ % ]は、全範囲の指定を行う時に使用します。
正規表現( pattern.txt )
| Explanation | |
|---|---|
| \ | 次の文字が正規表現なら通常の文字として処理 |
| ^ | 行頭 |
| $ | 行末 |
| . | 任意の1文字 |
| * | 前の文字の0回以上の繰り返し |
| \+ | 前の文字の1回以上の繰り返し |
| \e | Esc |
| \t | Tab |
| \r | CR |
| \n | LF |
| \b | BS |
| \s | Space 又は TAB |
[ * ]( 直前文字0 回以上の繰り返し )について。
[ 0 回以上の繰り返し]がミソです。[ 0回 ]という事は指定文字が無い場合も含まれています。従って、[ 任意の1文字 + * ]とすると、全部を指定してしまいます。なので、通常は以下のように、範囲の始まりや終了を示す文字の両方か、どちらかを一緒に指定します。
( [ 文字列の先頭1文字 ] ) + [ 繰り返したい文字1文字 ] + [ * ] + ( [ 終了文字列 ] )
[ 終了文字列 ]が行中に複数有る場合は、行中の最初ではなく行中の最後に表れる範囲までとなります。その他[ 繰り返したい文字1文字 ]に、任意の文字を指定したい場合は[ . ] を指定します。
さすがに使いにくいと思ったのか[ \+ ]( 直前文字1 回以上の繰り返し )が有りますが、指定文字数に差異が有りませんので、あんまり意味は無いかと。
指定範囲の行をコメントアウト
ビジュアルモードで範囲指定後に[ : ]を押すと、自動的に[ '<,'> ]が入力されるので、続けて[ s ]以下を入力します。
:'<,'>s/^/#/g
特定行の行末に指定の単語を追加
:g/keyword/s/$/addWord/g
行末のスペースを削除
:%s/ *$//g ← [ * ]の前にスペースが2個有ります。
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| m | x | Marking | 文字x のマークを付ける | ||
| ' | x | 文字x でマークした行の1文字目へ | |||
| ` | x | 文字x でマークした位置へ | |||
| '' | 前回編集行の先頭文字へ移動 | ||||
| `` | 前回編集位置へ移動 |
| Mode | Num | Command | Second | Spell | Explanation |
|---|---|---|---|---|---|
| : | !UnixCommand | Unixのコマンドを実行 | |||
| : | r !UnixCommand | Unixのコマンドを実行し、次行へ追加 | |||
| : | n,n2 | w !UnixCommand | 指定した範囲をUnixのコマンドに処理させる | ||
| ! | m | 指定した範囲をUnixのコマンドに処理させた結果と置換 | |||
| : | shell | シェルを呼び出す | |||
| : | sh | 同上 |
ビジュアルモードで使用出来るコマンドは以下と、コマンドモードの項目mode で[ v ] が記載されているコマンドです。
| Command | Spell | explanation |
|---|---|---|
| v | visual | 文字単位で領域選択開始・再度押すとビジュアルモードの終了 |
| V | visual | 行単位で領域選択開始・再度押すとビジュアルモードの終了 |
| ^v | visual | 短形モードで領域選択開始、再度押すとビジュアルモードの終了 |
| o | 選択範囲の先頭と末尾に交互に移動、移動後に領域拡張可 | |
| o | 選択領域内現行の反対側の端へ移動、移動後に領域拡張可 | |
| gv | 現在と前回の領域選択範囲をトグルする。又は、最後に選択した範囲を再選択する。 | |
| u | 選択した領域の文字を大文字に変更 | |
| u | 選択した領域の文字を小文字に変更 |
使用例
コマンドモードで[ v, V, ^V ]等のキーを押すと、ビジュアルモードに切り替わります。
次に[ h, j, k, l, w, $, ... ]の移動コマンドを使用する事により、領域が選択され反転表示されます。
領域選択後に[ y ] コマンドを使用すると、選択範囲がバッファにコピーされてビジュアルモードが終了します。
目的の位置に移動して[ p ] コマンド使用すると、先ほどコピーした内容がペーストされます。
| Command | explanation |
|---|---|
| ^D | 現行を左へシフト |
| ^T | 現行を右へシフト |
| ^U | 現行の入力済み文字を全部削除 |
| ^W | カーソル前の単語を削除 |
| ^N | カーソル位置後の同じ単語に補間 |
| ^P | カーソル位置前の同じ単語に補間 |
| ^V | 制御コードを入力 |
| ^A | 前回入力したテキストの挿入 |
| ^E | カーソル位置の次行の文字を挿入 |
| ^L | 一時的にコマンドモードへ |
| ^O | コマンドモードのコマンドを1 回実行 |
| ^H | <Back Space> |
| ^I | <TAB> |
| ^J | <Enter> |
| ^M | <Enter> |
| ^C | <Esc> |
| ^[ | <Esc> |
| ^^ | <Esc> |
| ^G | プレフイックス |
| ^K | 合字を入力 |
| ^Q | 次にタイプする文字をそのまま入力 |
| ^R | レジスタの内容を入力 |
| ^B | 無し |
| ^F | 無し |
| ^S | 無し |
| ^X | 無し |
| ^Y | 無し |
| ^Z | 無し |
| ^] | 無し |
( ) 内は逆設定。[ ] は省略形です。
hi normal term=bold cterm=bold ctermfg=white ctermbg=black
通常フォントの設定
hi statusline ctermfg=gray ctermbg=black
ステータスラインの配色設定
set autoindent ( noautoindent ) [ ai ( noai ) ]
自動インデント( インデントしない )
set background=dark [ bg ]
背景色の状態を設定。設定された状態を元に配色を決める。( 背景色が明るい場合の設定値は light )
set backspace=indent,eol,start [ bs ]
Back Spasceキーの動作設定を解除します。[ , ]で区切って複数のモードを設定できます。defaultでは何も設定されていない為、動作が限定されます。
| mode | explanation |
|---|---|
| indent | autoindentを超える動作 |
| eol | 改行を超える動作 |
| start | 挿入開始位置を超える動作。CTRL-W, U は挿入開始位置で一旦停止。 |
set backup ( nobackup ) [ bk ( nobk ) ]
バックアップを作成する( 作成しない )
set backupdir=$HOME/directoryName
[ ~/directoryName ]下にバックアップファイルを作成する。
set expandtab ( noexpandtab ) [ et ( noet ) ]
TABとしてスペースを使用する。
set hidden ( nohidden ) [ hid ( nohid ) ]
編集中でも他のファイル編集へ移動可( 編集中は移動不可 : default )
set ignorecase ( noignorecase ) [ ic ( noic ) ]
検索で大文字/小文字の区別をしない( 区別する )
set incsearch ( noincsearch ) [ is ( nois ) ]
入力途中でも検索( 途中検索はしない )
set laststatus=2 [ ls ]
ステータスラインを常時表示
set list ( nolist )
制御コードを表示( 非表示 : default )
set shiftwidth=n [ sw ]
インデントの間隔を指定
set showmatch ( noshowmatch ) [ sm ( nosm ) ]
閉じ括弧を入力すると、一瞬だけ対応括弧へ移動する。
set statusline= ( stl )
ステータスラインに表示する内容を指定します。尚、[ += ]を使用する事により、追記が可能です。( 詳細は、こちらを参照してください。 )
set tabstop=n [ ts ]
TABの間隔を設定
set title ( notitle )
ファイル名の表示( 非表示 )
set wrap ( nowrap )
折り返す( 折り返さない )
set wrapscan ( nowrapscan ) [ ws ( nows ) ]
検索時にtopへ戻る( topへ戻らない )
set tabstop=n [ ts ]
tabの間隔を設定
let &directory=&backupdir
swapファイルをbackupdirで指定したディレクトリ下へ作成する。
let loaded_matchparen=1
カーソルが括弧に掛かると、カーソルが分離して対応括弧にもカーソルが表示される機能の停止。
-c "command"
最初のファイルをロード後 [ command ] を実行する
参考までに、私の使用している設定ファイルを置いておきます。
[ ~/.vimrc ]内に以下を記述します。
:imap <c-f> <esc>
:imap ii <esc>
:imap hh <esc>
:imap jj <esc>jl
:imap kk <esc>kl
:imap ll <esc>ll
vim の場合は、ターミナル側にて設定します。gvimの場合は、以下のように[ ~/.gvimrc ] 内に記述します。
set winaltkeys=no
:imap <a-h> <esc>
:imap <a-j> <esc>
:imap <a-k> <esc>
:imap <a-l> <esc>
※ ターミナル側で設定した場合、vim側での[ alt ]関連設定は無効となります。
※ 通常、gvimでは [ alt-h ] はヘルプとなるので使用出来ませんが、winaltkeysでメニューをOFF にすれば使用出来ます。 #1
文字化けする場合は、以下のようにエンコーディングを指定すれば、指定したエンコーディングで読み込まれるので文字化けは解消します( 指定出来るエンコーディングは後述を参照 )。
$ vim "+e ++enc=cp932 fileName"
:e ++enc=cp932 fileName
所が、自動判別が優先されて文字化けが解消しない場合が有ります。そのような場合は以下のようにすれば、文字化けが解消します。
[ fileencoding ]で指定されているエンコーディングを表示させて、ロケールと同じになっている事を確認します。( 文字化けしているのですから、ファイル本来のエンコーディングとは異なっています。 )
:set fileencoding?
※ ロケールが不明な場合は、別途ターミナルを起動し、以下のように入力すると表示されます。
$ echo $LANG
ja_JP.eucJP
ロケールと異なる場合は、以下のようにしてロケールのエンコーディングでファイルを開きなおします。
:e ++enc=euc-jp fileName
[ encoding ]と[ fileencoding ]を、ファイル本来のエンコーディングと同じに設定します。
:set encoding=cp932 fileencoding=cp932
※ 設定を変えている為、内容を変更していなくても[ :q ]の使用は出来ません。
※ 上記は読み込み後の処理です。誤認識されるファイルを、ファイル読み込み時に指定して開く場合は、以下のようになります。
$ vim -c "set encoding=cp932 fileencoding=cp932" fileName
$ vim "+e ++enc=euc-jp" -c "set encoding=cp932 fileencoding=cp932" fileName
以上で文字化けが解消し、編集及び書き込みも出来るようになります。尚、設定出来るエンコーディングは以下のようになります。
別解としては、以下のような内容のスクリプトファイル[ vimsjis.sh ]を作成して、nkf を使用する方法も有ります。
#!/bin/sh
nkf -e -Lu --overwrite "$1" ;vim "$1" ;nkf -s -Lw --overwrite "$1"
encoding[ enc ]
vimが内部で使用しているエンコーディングで、通常はlocaleと同じに設定されます
fileencoding[ fenc ]
編集対象のファイルのエンコーディングです。
termencoding[ tenc ]
ターミナルのエンコーディングで、vimテキストデータの表示と入力に使用され、通常はlocaleと同じに設定されます。
++enc
指定されたエンコーディングでファイルを開く為のオプションで、++encに設定された内容は、fileencodingに引き継がれます( encodingに引き継がれる分けでは無いので注意して下さい )。
vim 起動時のエンコーディングの指定は、以下のように設定され、
encoding ← ロケールの値がそのまま設定される。
fileencoding ← ファイルの文字コードの自動判別結果が設定される。
ファイル読み込み( 起動 )時に[ fileencoding ]の値に基づいて、[ encoding ]で指定されている文字コードに変換して( 同じ場合は変換されません )、バッファに格納します。
従って、[ fileencoding ]に正しいエンコーディングが設定されていれば、[ endodign ]で指定している形式に変換されるので、何の問題も無いのですが、[ fileencoding ]の値が間違っていると、バッファに格納される文字コードと[ encoding ]の内容が異なる事に成る為、文字化けとなります。
通常、間違える時はロケールの値となりますから、[ encoding = fileencoding ] となり無変換で読み込まれます( [ fileencoding ]が、とんでもない設定になっている場合は[ :e ++enc=euc-jp fileName ]でロケールに合わせます )。従って、[ encoding ]の内容を本来の文字コードに合わせると文字化けは解消されますが、このままでは[ fileencoding ]と異なる為、セーブ時に変換されます。そこで、[ fileencoding ]の値も本来の文字コードに設定しなおす事となります。
尚、[ encoding ]と[ fileencoding ]は、単にエンコーディングの値を保存しているだけですから、設定を変更してもバッファ内のテキストデータ等は変換されません。但し、ファイルのread/write( 起動時のファイル読み込みを含む )時には、この設定に基づいて変換される事となります。又、cp932 と sjis 間でも変換されるので、注意して下さい。
ちなみに[ encoding ]や[ fileencoding ]の値を変更してから[ :e! ]とすると、自動判別が再度行われるので[ fileencoding ]は元に戻りますが、[ encoding ]は戻りませんから、状況に依っては複雑になる事があるかもしれません。
バイナリモードでファイルを開きます。
vim -b binaryFileName.bin
xxd を使用し以下の好みの方で、16進数ダンプ形式に変換します。
:%!xxd
:%!xxd -g 1 ← バイト単位
通常通り編集します。
※ 16進形式への変換を行わずに、テキスト形式のまま編集する場合は、置換モード[ R ]を使用します。
テキスト形式に戻します( この後でセーブします )。
:%!xxd -r
#1 gvimで最初に探したのが此の機能です。vim を使用するユーザがメニュからの選択など行うハズもなく、メニュモードがdefaultでONなのは不可解です。
#2 [ shift_jis ]と記載しているWeb が多数存在し、実際使用出来ますが説明書には記載されていません( localeには記載が有りますが、encodingには有りません )。
#3 一覧表には無いのですが、設定例等で記載が有り、使用出来るようです。