カテゴリー別アーカイブ: editor

vim tips その4

前回にひき続いてvimのtipsを紹介していきましょう。
今回はより快適に作業するためにvimが編集作業をどのように扱うのかをバッファ・ファイルについてと、より効率的に作業するためにウインドウやタブの概念について説明します。

バッファを理解する

vimがメモリ上に保持して展開している内容のことをバッファと呼びます。
vimで何かしらのファイルをオープンした時、ファイルの内容をバッファに読み込みます。
編集を行っているときは実際にはバッファの内容をオンメモリで編集しており、リアルタイムにファイルに書きだされているわけではないのです。したがって当然バッファの編集を行った場合、バッファの内容とファイルの内容には差がでます。
当然最終的には編集したバッファの内容をファイルに書き出すことで、作業した内容の永続化処理をおなうことになります。

つまりウインドウから我々ユーザが見ている内容はvimのバッファの内容ということになります。
感覚的にはウインドウはバッファを除くビューポートのような働きをしていることになります。

試しにvimから複数のファイルパスを引数に与えて起動してみましょう。

vim a.txt b.txt

するとvimは内部でそれぞれのファイルに対応するバッファを展開します。
この様子は下記のexコマンドを実行することで、展開しているバッファの様子を確認することができます。
(exコマンドには前回説明しましたので、わからない方は参照してみてください。)

:ls

exコマンドを実行すると下記のように表示されます。

:ls
  1 %a   "a.txt"                        line 1
  2      "b.txt"                        line 0
Press ENTER or type command to continue

1,2と各バッファに項番がふられている様子と、それぞれのバッファに対応しているファイルパスが確認できます。
またaactiveを表し、現在参照しているバッファを指しています。

このようにvimではバッファを複数持つことができるので毎回ファイルを開き直さなくても編集可能なようになっています。
続いて各種バッファに対する操作についても見ていきます。

バッファを移動する

各バッファについてはexコマンドを用いて移動することができます。それぞれについて説明します。

exコマンド 意味
:bnext 次のバッファに移動する
:bprev 前のバッファに移動する
:bfirst 最初のバッファに移動する
:blast 最後のバッファに移動する
:buffer{N} N番目のバッファに移動する
:buffer {bufname} 指定の名称のバッファに移動する

バッファを操作する

展開しているバッファすべてに対してexコマンドを適用するようなこともでき、:bufdoで実現することができます。
一気にファイルを操作することができて非常に便利です。

またバッファは当然削除することもできます。
ここに関してはバッファ自体が削除されるだけで、実際に永続化されているファイルも削除されるわけではありません。

exコマンド 意味
:bufdo 展開しているバッファ全てに対してexコマンドを実行する
:bdelete {n} {m} {l} 指定した項番のバッファを削除する
:{n},{m} bdelete 指定した項番の間にあるバッファを全て削除する

引数リストを理解する

バッファリストと少し似たような概念として引数リストがあり、これは名前が示すように、vimが展開している引数のリストになります。

現在の引数リストを表示するには下記のように実行します。

:args

先ほどと同様にvimにオープンするファイルを引数にあげて起動した状態から:argsコマンドを叩くとどのようになるかを確認します。
結果としては下記のように、引数として与えたファイルが列挙される形で表示されます。
カギカッコでくくられているファイルは現在アクティブである引数を表しています。

[a.txt] b.txt

引数リストに関して覚えておくべきことは、それが常に同じ状態を持っていることではないこと、それと引数リストを設定することができることです。
引数リストを設定するというのは実際には、exコマンドを用いて新たにバッファを追加するという事になります。

引数リストの設定については下記のようになります

:args {arglist}

上記のような性質から当然、引数リストの内容は常に変更可能であり、:argsの出力結果がバッファリストの内容と一致するという保証はないです。
次に引数リストを用いてバッファをオープンする方法を見ましょう。

余談ですが、引数リストに関してはviの機能で、バッファリストに関してはvimで拡張された機能になります。
なので似たような振る舞いを保つ機能が2つ存在しているかのようになっているのですが、引数リストを応用することで便利なことができます。

引数リストを用いてバッファを操作する

先に述べたように引数リストを指定することでバッファを新たに展開することができます。
これの便利なところは指定する表現にglobを使用することができる点です。

たとえば特定のフォルダ配下のすべてのファイルをバッファに展開したい場合は下記のようになります。

:args **/*

知っている方にはおなじみで直感的にわかりやすいと思います。
また当然glob表現であるため、その表現を利用できます。

例えばtxtファイルだけをバッファに展開したい場合は下記のようになります。

:args **/*.txt

また:argsコマンドはバッククォートを展開することができるので、例えばプロジェクトのファイルリストを保持しているファイルがある場合、下記のようなコマンドを用いてプロジェクトのファイルを引数リストに展開することも可能になります。

:args <code>cat filelist</code>

また先にすべてのバッファに対してexコマンドを適用するコマンド:bufdoを取り上げましたが、引数リストに関しても同様に引数リストに存在するもの全てに対してexコマンドを適用するコマンド:argdoが存在します。

この2つに関して言えることはバッファリストに関しては、展開しているすべてのバッファを含んでしまうことになりますが、引数リストに関しては作業状況に応じて変更することが可能なものです。
引数リストはテンポラリな作業場のようにして使うことができるのです。

隠しバッファを理解する

隠しバッファとは一言で言うと、編集中(ダーティー)なバッファのことです。
あるファイルを展開して、それを編集した後に、保存処理などを行わないで終了しようとすると警告がでます。
これを意図的に無視することができ、編集したものを一時的においておき、別のバッファに映るときに隠しバッファを利用することができます。

例えば、あるバッファを編集し、それを隠しバッファとして次のバッファに映るときには下記のようにタイプします

:bnext!

!マークをつけることで隠しバッファとすることができます。

これが何に利用できるのかということなんですが、展開している全バッファに対して一気に操作を適用するときに利用します。(というかこれしないと:bufdoなどが使えないです)

vimには隠しバッファを利用するかしないかの設定をグローバルに保持しており、それは下記のコマンドで有効にすることができます。

:set hidden

:bufdoなどの複数バッファにコマンドを展開するコマンドの共同に関して隠しバッファを利用しない場合、下記のようなフローになります。

1. 先頭のバッファの内容に変更を適用する
2. ユーザに対してインタラクティブに保存を求める
3. 次のバッファに移動する

なのですが項目2.で:bufdoが止まってしまうため使用できないのです。

よって隠しバッファを有効にすることでダーティな状態を許容することができ、項目2.がなくなり:bufdoが適用可能になります。

ウインドウを理解する

vimにおけるウインドウはバッファを参照するビューポートのような働きをします。
もちろんウインドウを複数作成することができるのですが、そのウインドウが覗き見ているバッファの内容はなんでも良いです。
これによって異なるウインドウから同じバッファを見ることなども可能になります。

ウインドウの操作について見て行きましょう。

ウインドウの分割

コマンド 意味
Ctrl-w s ウインドウを水平に分割する
Ctrl-w v ウインドウを垂直に分割する
:split {filename} 指定のファイルを新しいウインドウでオープンする

またウインドウで新しいバッファを覗き見たい場合は:edit {filename}の用にタイプすることで可能です。

続いてカーソルをウインドウの間で移動するには下記のようにします。

フォーカスの移動

コマンド 意味
Ctrl-w w 次のウインドウに移動する
Ctrl-w h 左のウインドウに移動する
Ctrl-w j 下のウインドウに移動する
Ctrl-w l 右のウインドウに移動する
Ctrl-w k 上のウインドウに移動する

ウインドウを閉じる

ノーマルコマンド exコマンド 意味
Ctrl-w c :clo[se] 現在アクティブなウインドウを閉じる
Ctrl-w o :on[ly] 現在アクティブなウインドウ以外のウインドウを全て閉じる

ウインドウのサイズを変更する

コマンド 意味
{N} Ctrl-w _ 高さをN行に指定する
{N} Ctrl-w | 幅をN行に指定する
Ctrl-w = すべての高さと幅を同じにする
Ctrl-w _ アクティブなウインドウの幅を最大化する
Ctrl-w | アクティブなウインドウの高さを最大化する

またウインドウに関してもバッファや引数リスト同様に、全ウインドウに対してexコマンドを実行するコマンドが存在し:windoで実行することができますので、覚えておくと良いと思います。

タブを理解する

vimではタブもまた保持することができ、vimにおけるタブとはウインドウのコレクションになります。
特に難しいことはないと思いますので、ここでは各種コマンドをご紹介するに留めたいと思います。

タブを操作する

コマンド 意味
:tabedit {filename} タブを開く(同時に新しいウインドウ・バッファで開かれることになります)
Ctrl-w T 新しいタブを開いてウインドウをそこに移動する
{N}gt 番号指定でタブを移動する
gt 次のタブへ移動する
gT 前タブへ移動する
:tabclose アクティブなタブをクローズする
:tabonly アクティブなタブ以外のタブをすべてクローズする

いかがでしたでしょうか。
作業を効率化するために自分なりのタブやウインドウの設定を見つけていくことで快適な作業環境を構築できるんじゃないかなと思います。


vim tips その3

前回にひき続いてvimのtipsを紹介していきましょう。今回はコマンドラインモードについてまとめたいと思います。

コマンドラインモードとは

vimは :(コロン)をタイプすることでコマンドラインモードという特殊なモードに遷移することができあらかじめ用意された組み込みの動作を実行することができます。

コマンドラインモードの幾つかはノーマルモードで同等のことが実行でき、状況に応じて両者を使い分けることでより快適な編集ができることになると思います。

コマンドの構成を理解する

例えば三行目を削除するといった動作を考えてみましょう。
これは:3dというコマンドで実現できます。
まずはこのコマンドを紐解いていきます。
コマンドラインモードへ映るには:をタイプします。
さらにその後にある3はレンジを表します。今は単行を示していますが、複数行やファイル全体をレンジ対象とすることもできます。
最後にdに関してですが、これは指定したレンジに対する動作を表し、以前説明したオペレータと同様のものになります。

まとめるとバッファに対する編集操作を行うコマンドは下記のように構成されています

構成要素 意味
プレフィクス : コマンドラインを使用することを表す
レンジ 3 編集する対象範囲を表す
オペレータ d レンジに対する動作を表す

基本的なレンジ指定方法を理解する

先程は単行のレンジ指定を例として取り上げましたが、レンジ指定にはいろいろな指定ができ、これが非常に汎用性が高く便利なものなので、是非理解していきましょう。

下記に主要なレンジ指定を示したいと思います。

意味
1,5 指定の行を範囲とする。例では1行目から5行目までをレンジとする
.,5 .を用いて現在カーソルのある行を表せる。例では現在行から5行目までをレンジとする
5,$ $を用いてファイルの末尾を表せる。例では5行目からファイルの末尾までをレンジとする
% バッファ全体をレンジとする

例としてファイルの5行目から10行目だけを削除したい場合は下記のようにコマンドをタイプします

# 5行目から10行目を削除し、レジスタに格納する
:5,10d

またよくあるsubstituteコマンドによりファイル全体を置換するコマンドに関しても%を用いてバッファ全体をレンジに指定にしていると理解することができます

# ファイル置換コマンド。%はバッファ全体をレンジとすることを意味し、sは置換オペレータの省略形を意味する
:%s/before/after/g

パターンによるレンジ指定方法を理解する

直接的な行指定だけでなくコマンドにはパターンを用いたレンジ指定も可能です。

意味
/<html>/,/<\/html> 指定の行を範囲とする。例では1行目から5行目までをレンジとする

はじめは少し見慣れないかもしれないですが、実態としてはスラッシュ区切りで開始パターンと終了パターンを指定しているだけで、そこまで複雑なものではありません。

使用例として、たとえばbodyタグの内部をタグも含めて削除するような場合下記のようなコマンドとなります

:/<body>/,/<\/body>/d

下記のようなテキストファイルに対して上記のコマンドを実行します

<html>
  <body>
    textext
  </body>
</html>

結果は下記になります。bodyタグ含む内部が削除されていることがわかりますね。

<html>
</html>

またパターンに関して、パターンが存在する行からのオフセットを指定することもできます。

例として、htmlタグの内部のみを削除するような場合下記のようなコマンドとなります

:/<html>/+1,/<\/html>/-1d

同様に先ほどのテキストに対してコマンドを実行すると結果は下記のようになり、bodyタグを除いて内部が削除されていることがわかりますね。

<html>
  <body>
  </body>
</html>

コピー・移動コマンドを理解する

先に取り扱ったコマンドと同じような形で指定行のコピーや移動を行うことができます。
その構文は下記のようになります。これも見て行きましょう。

:{source}{command}{desctination}

それぞれのコマンドは下記のようになっています。

動作 コマンド 意味
バッファの内容をコピーする copy または t 任意の行のコピーを行う
バッファの内容を移動する move または m 任意の行の移動を行う

例えば下記のようなバッファに対して3行目の内容を4行目に移動したい場合を考えましょう。

<html>
  <body>
    <i>hogehoge</i>
    <div><p>fugafuga</p></div>
  </body>
</html>

その際には下記のようなコマンドで実現することができます。

:3t4

単行での例となりましたが、複数行でのレンジ指定ももちろん使用可能ですので非常に汎用性の高いコマンドとなります。

normalコマンドを理解する

こちらも非常に汎用性が高いもので、指定のレンジに対してノーマルモードで行いたいオペレータを適用することができます。
もちろんこちらはノーマルモードやビジュアルモードと併用したりしても同様のことが実現できます。
コマンドモードからの実行のほうが効率が良いこともありますので是非覚えておきましょう。

構文については下記のようになります

:{レンジ指定}normal {ノーマルコマンド}

例えばバッファ全体に対してコメントアウト(//)を追記したい場合下記のようにコマンドします

:%normal i//

一つ一つみていきましょう。
%レンジを指定しているので対象がバッファ全体となります。
その後にnomarlとタイプすることでnormalコマンドを実行できます。
半角スペースをひとつ開けて、続いてタイプした内容が実際のノーマルコマンドの内容となります。
ここではiを入力して挿入モードに遷移し//をタイプしているため、全行のコメントアウトということが実装できるわけです。

またお察しの良い方は気づいているかもしれませんが、normalモードを実行する際にはカーソルの位置は暗黙的に行の先頭に初期化されます。

コマンドラインウインドウを理解する

vimでは実行したコマンド履歴を保存しており、それらを参照したり編集したりすることができます。
コマンドラインウインドウを開くにはq:とタイプします。
(すこし:qと紛らわしいですので注意ですね。)

コマンドを実行すると過去の実行履歴がサブウインドウによって開かれます。
コマンドラインウインドウは通常のvimウインドウと同じように編集することができ、編集を保存し終了するときなども同様に:wqで行うことができます。
またUpキーやDownキーにより、過去のコマンドを選択することができ、エンターキーをタイプすると現在のウインドウに対して過去実行したコマンドを再度実行することが可能です。

シェルとのやりとりを理解する

またvimはシェルとも非常に親和性が高く、vimを起動中にシェルを呼び出したり、その標準出力や標準入力に関してやりとりすることが可能です。

まずvimの中からshellを実行するには下記のようなコマンドになります

:!{任意のコマンド}

例えばlsコマンドを叩く場合は下記のようになります

:!ls

コマンドを実行すると一度vimではなくシェルウインドウが開き、結果が表示されます。
その状態からエンターキーをタイプすると再びvimの画面へと戻ってくるような流れになります。

ワンライナーでの実行ではなくシェルとインタラクティブに対話したいときは

:shell

と実行することでシェルが起動します。これは通常のシェルと同様で、再びvimに戻る場合はexitを用いてシェルを終了する必要があります。vimの編集している状態を残しつつ一時的にシェルを起動したい時など非常に有用だと思います。

またバッファの内容をシェルとやりとりすることができます。

vimからシェルを呼び出しその実行結果(標準出力)を現在のバッファに挿入する場合はreadコマンドを用います。
例えばlsの結果をバッファに挿入したい場合は下記のようになります

:read !ls

逆にバッファの内容をシェルの標準入力に挿入する場合はwriteコマンドを用います。
例えばphpスクリプトを記述していて、それをvimの中から呼び出す場合なんかは下記のようになります。

:write !php

最後に範囲指定で!コマンドを行うとバッファの内容をシェルに渡したあと、結果で選択範囲のバッファを上書きすることもできます。

例えば下記のようなテキストがあった場合
対象をgmail.comのユーザのみに絞り込みたいとします。

id,name,email
1,Bob,ex1@gmail.com
2,Jobeth,ex2@yahoo.com
3,Steven,ex3@gmail.com
4,Smith,ex4@yahoo.com

この際に2行目から最終行までをレンジ選択して、grepコマンドを用いてフィルタリング処理を行ってみましょう。

:2,$ !grep @gmail.com

結果として下記のようにフィルタリング処理が実行できています。

id,name,email
1,Bob,ex1@gmail.com
3,Steven,ex3@gmail.com

いかがでしたでしょうか。
非常に汎用性の高いコマンドが多く、便利なものばかりですね。
またシェルとのやりとりも覚えることで、別窓で処理したり、一度vimを閉じてから・・・などという手間もなくなるので覚えておきたいですね!


vim tips その2

さて前回にひき続いてその2ですが、今回は主にビジュアルモードについてまとめたいと思います。

ビジュアルモードとは

範囲選択をし、それを対象にしてオペレータコマンドを実行することができます。
ちなみにこれはノーマルモードで「オペレータ」と「モーション」を組み合わせることでコマンドを実行することの逆転に等しいです。
ビジュアルモードでは先に「モーション」を指定して、それに対する「オペレータ」を実行するように解釈できます。

ビジュアルモードへ遷移する

まずビジュアルモードには三種類存在します。
ひとつは「文字指向」のビジュアルモードで文字単位での選択の際に利用できます。
またひとつは「行指向」のビジュアルモードで行単位での選択に利用できます。
最後に「ブロック指向」のビジュアルモードがあり、これは矩形選択を可能にします。

それぞれのモードへ遷移するショートカットは下記のようになります。

キーバインド 操作
v 文字指向のビジュアルモードへ遷移する
V 行指向のビジュアルモードへ遷移する
Ctrl-v ブロック指向のビジュアルモードへ遷移する
gv 直前のビジュアル動作を繰り返す

ビジュアルモード間を移動する

一旦なにかしらのビジュアルモードへ遷移すると、開始地点が固定される形となります。
ビジュアルモードに遷移した後に、カーソルを移動すると現在のカーソル位置を終点として現在繊維中のビジュアルモードに依存した範囲選択が適用されます。

ようするにビジュアルモードでは開始地点と終了地点とビジュアルモードの3つにより選択範囲が決定されます。
そのうちビジュルモードに関しては、開始地点と終了地点を変更することなく、モードだけの変更が可能です。
そのキーバインドはノーマルモードから遷移する際と同様です。シンプルですね。

また特定のビジュアルモードにある状態で、もう一度そのモードに遷移するキーバインドを実行すると今度はノーマルモードに遷移します。
つまり、ノーマルモードとビジュアルモードを切り替えるトグルとして機能するということです。これもまたシンプル。

またoキーをタイプすることで、開始地点と終了地点を入れ替えることができます。
これによって開始地点を誤って設定してしまった時に一度ビジュアルモードを抜けてノーマルモードになって・・・などという手順を踏まずに開始地点を変更することができます。便利。

使いドコロ

実際どんなことに使えるのかなというところをいくつか例にとってみてみましょう。

  • マルチカーソル(削除)
  • sublimeなんかである今っぽい感じの機能が擬似的に使用できます。
    例えば下記のような共通プレフィクスを消去したいときなどを考えましょう。

    <a href="http://prefix.example.com/A"></a>
    <a href="http://prefix.example.com/B"></a>
    <a href="http://prefix.example.com/C"></a>
    

    Ctrl-vを用いた矩形選択を行い、横一列、縦三行の矩形を選択します。
    あとはx(削除)をタイプすれば3行同時に編集することが可能です。こんな使い方もできます。

  • マルチカーソル(挿入)
  • 同様に複数行に一気に編集を行いたい場合、それも矩形選択で可能です。
    例えば下記のようなhttpリンクにさらにサブホスト名を追加したい場合を考えましょう。

    <a href="http://prefix.example.com/A"></a>
    <a href="http://prefix.example.com/B"></a>
    <a href="http://prefix.example.com/C"></a>
    

    まずははじめの行のprefixのpの位置にカーソルをおきCtrl-vで矩形選択ビジュアルモードへ移動します。
    そこからjjをタイプし、横一列、縦三行の矩形を選択します。
    そこからIキーをタイプすることで、挿入モードへ遷移できるので、そこで追加したサブホスト名を入力すれば完了です。

    この時点でははじめの一行目しか編集されていないように見えるが最後にノーマルモードへと遷移すると矩形選択していた三行に同じ編集が適用されます。

    マルチカーソルなどは最近のエディタから付随していた機能かと思いましたが、随分昔からあるんですね。素晴らしいです。

  • 水平線見出し
  • 行選択とテキスト置換処理を行うことでテキストベースでの区切りなんかを生み出せます。
    例えば下記のようなデータが有り、ヘッダとボディ項目の間に区切りを入れたい時なんかを考えましょう。

    key value
    hoge - 1
    fuga - 2
    

    カーソルを左上に置いた状態でyypからのVで行選択、さらにr-を押下することで行すべてをハイフンに置換でき、即席の区切りができたりします。

    欠点

    ビジュアルモードは万能というわけではなくノーマルモードによる操作のほうが適した場合もあります。

    とりわけ繰り返し動作を行う際に、意図したものと異なる結果となることが多いです。
    ビジュアルモードは操作を範囲として選択するため、繰り返した際にもその「オペレータ」として機能した範囲が以前の動作に引きずられて固定されます。

    ピンポイントに行の中間での可変長なエリアでの編集処理というところは苦手であるので、そういった時はオペレータを用いたノーマルモードでの編集が有効です。

    まとめ

    欠点も少しありますが、vim全体としては無くてはならない機能です。
    特にマルチカーソルは使いこなせば非常に作業効率を上げることが出来る機能であるので是非理解してほしい機能です。
    是非使用してみてください。


    vim tips その1

    みなさんvim使いこなしていますでしょうか?
    私はメインのエディタとしてはコーディング用にもプレーンテキスト編集用にもsublimeエディタを使用しております。
    sublime自体、初めから非常に使用しやすく設計されているためあまりカスタマイズしなくてもそこそこ使えますし、そもそも複雑なコマンドなどを覚えなくてもGUIベースで使用できるので学習コストが非常に低いので取っ付き易い。
    マルチカーソル機能などもあり、一気に編集できるので非常に重宝しています。非常にいいエディタですね。

    ただ当たり前なんですがGUIベースなので少々マウスなどのポインティングデバイスに手を伸ばす必要があり、より高速にタイピングをするという意味でvimなどのテキストベースのエディタがかなりよいです。

    今回は実践で使えそうなトピックとしてvimの便利なtipsを紹介していきます。

    さっそくですが、基礎的な部分を今回は紹介します。

    ノーマルモード、挿入モード、置換モードを理解する

    vimは起動した時点でノーマルモードで起動し、実際にテキスト編集を行うときには挿入モードや、置換モードに変更してからテキストを入力する必要があります。
    便利なショートカットなど踏まえて紹介します。

    挿入モードへ変更する

    基本としてiキーをタイプすることで挿入モードに遷移することができます。
    その他にもvimはいくつかのキーで挿入モードに遷移することができ、これらを使いこなすことで入力スピードを格段に向上することができます。

    行の末尾・先頭のテキストを変更したい場合

    Aキーをタイプすることでカーソルを行の末尾に遷移しつつ、かつ挿入モードに遷移することができます。
    カーソルを一番最後まで移動してからiキーをタイプするよりもだいぶ高速に入力することが可能になります。

    またaキーをタイプすることでも現在のカーソルがある位置から一つ後ろにカーソルをずらしつつ挿入モードに遷移することができます。
    これを行の末尾にカーソルを移動できる$キーや、行の先頭にカーソルを移動できる0キーと組み合わせることで行の末尾や先頭のテキスト編集を高速に行えます。

    挿入モードからノーマルモードへ戻る

    基本としてEscキーをタイプすることで挿入モードからノーマルモードへ戻ることが可能です。
    ただ現在のキーボードはたいていEscキーは左上に存在していると思いますので、何気にタイプするのが辛い位置にあります。
    そのため早く入力を可能にするためにCtrl-[キーを使用することをおすすめします。これもEscキーと同様に挿入モードからノーマルモードへ戻ることができます。
    こちらのほうがホームポジションから手をずらすことなくタイプ可能なため、癖をつけておくと良いです。

    置換モードで変更する

    挿入モードとは別に、既存の文字を上書きしていくような入力モードが存在し、これを置換モードと呼びます。
    このモードを使用するにはRキーをタイプします。ノーマルモードに遷移するには、挿入モードからノーマルモードへ戻る手順と同じように、EscキーやCtrl-[をタイプすることで可能です。

    ノーマル挿入モードを利用する

    実際にテキストを編集する際にはノーマルモードと挿入モードを頻繁に往復する必要があり、このモードチェンジが煩わしく感じることも少なく無いと思います。
    こういう時に利用できるのがノーマル挿入モードとなります。
    このモードは挿入モードにあるときに、一時的にノーマルモードのコマンドを一つだけ受け付け、その後すぐにまた挿入モードに戻ります。
    挿入モードにあるときにCtrl-oキーをタイプすることで、一時的にノーマルモードでのコマンドを受け付けられるような状態になります。
    この時受け付けられるコマンドは一つだけで、入力するとまたすぐに挿入モードに戻りますが、非常に重宝するコマンドです。

    以上簡単ですが使えそうなtipsをかいつまんで紹介しました。
    とくに最後のノーマル挿入モードに関しては、非常に便利で学習するべきなのに、ちょっとvimを触ったことのあるレベルの人くらいでも知らない人も多いのではないかと思います。

    またvim tips継続的に紹介していきます。