読者です 読者をやめる 読者になる 読者になる

Vimのコマンドでテキスト整形

※本記事はVimの基本操作の話です。プラグインは使用しません。

 

( ´_ゝ`)ノシ

yoshitiaです。

ブログトップ画像を変更しました。

GWにお出かけしたときのフッジサーン/(^o^)\です。

どうも桜とか富士山とかそういうのじゃないと

写真取る気起きない性分みたいです。

 

本題。 

今回はSQLのCREATE文からカラムのコメントに記述されているカラム名を取り出す、

これをVimで行う手順を書いてみようと思います。

(postgreSQL, pgAdminのSQLビューから取り出す想定)

Vimの起動・保存・入力・終了がわかっていれば理解はできるかと。

 

1. 上下の余分な行を削除

以下のsqlpostgresqlの公式ドキュメント

https://www.postgresql.jp/document/9.4/html/sql-createtable.html

から取ってきて雑にコメントを後ろに追加しただけになります。

取り出したいのはフィルム番号、タイトル...の部分です。

CREATE TABLE films (
    code        char(5), -- フィルム番号
    title       varchar(40), -- タイトル
    did         integer, -- ディストリビュータid 
    date_prod   date, -- リリース日
    kind        varchar(10), -- 種類
    len         interval hour to minute, -- リリース日からの経過時間
    CONSTRAINT code_title PRIMARY KEY(code,title)
);

 pgAdminのsqlビューだともう少し上下に余分なものがあります。

Vimで上下の余分な行を取り除くときは以下の操作を行います。

ノーマルモードで取り出したい部分の下の行に移動させて

で行頭に移動。

次に dG を押します。

dGのdは削除を指定、続くG(Shift+g)で

「カーソルからファイルの末尾まで」の範囲指定を行っています。

 

次に gg でファイル先頭にカーソル移動。

続けてdd と入力すると1行削除が実行されます。

続いて.(ドット)を取り出したい部分より上の行がなくなるまで連打します。

.(ドット)は直前に実行したノーマルモードのテキスト編集操作を繰り返します。

Vimの.(ドット)コマンドについてはwebに沢山記事があるのでweb検索すると幸せになれます。

 

必要なコメントがある行以外を抜くと次のようになります。

    code        char(5), -- フィルム番号
    title       varchar(40), -- タイトル
    did         integer, -- ディストリビュータid 
    date_prod   date, -- リリース日
    kind        varchar(10), -- 種類
    len         interval hour to minute, -- リリース日からの経過時間

 

2. コメント以外の部分を取り除く

 1の結果からコメント以外の部分(--より左側)を取り除きます。

各行のコメント開始位置がそろっていないのが面倒です。

結論から言うとexモードで置換します。

1より慣れが必要なのでこういうことがVimでできる、という紹介になります。

今はVimに限らず高機能なテキストエディタがあるので

同じ事が利用中のテキストエディタで可能か調べるのは学びがあると思います。

    code        char(5), -- フィルム番号
    title       varchar(40), -- タイトル
    did         integer, -- ディストリビュータid 
    date_prod   date, -- リリース日
    kind        varchar(10), -- 種類
    len         interval hour to minute, -- リリース日からの経過時間

各行コメントの左側は文字数等に差はありますが

「コメント部分の左側は『-- 』」なのは共通しています。

そこでノーマルモードで :%s/^.*-- //を入力後Enterで実行すると

 以下の様になります。

フィルム番号
タイトル
ディストリビュータid 
リリース日
種類
リリース日からの経過時間

コマンドの内容は

: がexモード開始、 %はexモードで「今画面で編集中のファイル」を表す記号です。sはsubstitute(置換)を表します。

%の部分を省略するとカーソルのある行が対象になります。

 /から右側は /置換対象/置換する文字列/ です。

「^.*」は正規表現なので一文字ずつ調べると幸せになれます。

 

3. まとめ

vimでテキスト編集を行うときは

編集する手順を考える→実行する

→うまくいかなければundoする→...

の繰り返しです。

テキストの編集で「どう編集するか」を

考えるのは面倒だと思います。

 ですが、ある程度繰り返していくと

編集する手順を考える時間が短くなっていきます。

コツは、無理に1回の操作でやりたいことを

片付けようとしないことです。

Vimが身についてくると

「こうしたら少ない操作でできるんじゃないか」と

思いついたり調べたりする気持ちの余裕が出てくるのでそこからが本番です。

それまではカーソル移動がhjklだけでも

文字削除にx連打でもいいんじゃないかと。

よし、Vimmerらしい記事書いたぞ。

Happy Vim Life!