Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

意識の低いVimの始め方

$
0
0

まずは邪道でいい、Vimもただのツールだ

暴論だけどhjklキーでカーソルを左下上右移動、という操作はひとまず忘れましょう。
上下左右キーがあるのに上下左右キーを使わない、という直感に反する操作でVimを使わないなんてとんでもありません!

仮にVimを使って満足いかなかったら、きっとEmacsに走るのだから!
その時にhjklキーは足かせになる可能性もあるのだから!

などという言い訳はここまでにして、意識の低いVim本題に入りましょう。

文字列は検索しようぜ

ここではWindowsユーザーを想定します、なぜなら私がWindowsユーザーだから。

いわゆるテキストエディタ、特にWindows系の愛用ソフトを使っている場合、文字列検索機能を使わないで、ついつい「一行一行、目で追って探してしまった」なんて経験はありませんか?

Ctrl+Fで検索窓が出てくるケースは多いですが、メニューのキーボード操作だとAlt+eのあとにfなど操作しづらいです。
しかもマウス操作だったら、もっと面倒くさいですよね?
こんなの誰も使いたいとは思えません、そんなオカルトあり得ません。

しかしRegular Expression、いわゆる正規表現を使おうとしたら、さらに追加の操作(正規表現の機能有効化など)が必要になったり、下手したら正規表現検索そのものが実装されていなかったり。

検索機能が無茶苦茶優れているコンピュータを使いながら、その開発者…それこそ世界で上位1割に入る人…が検索機能を実装する時に検索を使っていないなどという本末転倒に陥ってる人、あなたにも心当たりはありませんか?

いや絶対いるでしょ?ソースは俺だよ、文句あっか!

いよいよVimの話

Vimには「NORMALモード」「INSERTモード」その他のモードがあり、そしてNORMALモードで起動して、すぐに文字を入力しても編集できません。
それで「なんだこれ面倒くさいな」というのは、おそらく誰もが通る道です!(主語がでかいのは仕様)

ここで「無条件にINSERTモードに入るのはもったいない」という話をします。

Vimの自然な入り口としては、Vimはテキストビューアだと考えろというのがこの記事の主旨です。とりあえず、これを読んでいるあなたも、テキストビューアだと決めつけてください、少なくともこの記事を読み終わるまでは。
その証拠として、この記事ではINSERTモードを使いません。

カーソル上下左右だけなら、とりあえず文章編集できません、PageUp PageDownでもできませんね、普通に使えるはずです、この辺は好きに使ってください。

他の操作は、ちょっと何が起こるかわからないから保留でお願いします。

え?キーボードはPFUのHHKBを愛用?そんなあなたはさっさとこの記事を閉じてください!これ以上読むのは時間の無駄ですよ。

さてVimで文字列検索しよう

とりあえずWindows10のWSL(Windows Subsystem on Linux)でUbuntuを導入しbashを使っている、と想定します。
そしてサンプルファイルはbash初期設定ファイル .bashrc にします。

vim ~/.bashrc

これでファイルの中身が表示されますよね、と釈迦に説法してから、設定されているaliasを探しましょう。

(ここが最重要)NORMALモードで、以下のように入力してください。

/alias

「頭に / を付けて検索したい文字列(ここではalias)」です。
Enterキーを押したら最初の alias 文字列がある場所へと飛んでくれます。
次を探すなら n、nextの略でしょう。Shiftキーを併せて N にすれば前の場所に飛びます。

ねえ、これってテキストビューアとしては優秀じゃない?ってのがこの記事の主旨です。

編集もできるテキストビューアVim

さて、あなたの .bashrc にあるかどうかはわかりませんが

#alias dir='dir --color=auto'

このように # でコメントアウトされた dir を有効化、すなわちコメントを示す # を削除したい、とします。Windowsのコマンドプロンプトに馴染みすぎてたら使う人もいるかもしれないですからね。
検索するのは、最重要なので繰り返しますが、NORMALモードのまま

/#alias

とりあえずこうです。

Vim魔界の民からは「ここで正規表現の説明に移れよ」ほか多数の突っ込みが入りそうな気がしますけど、主旨はとりあえず意識低く使うのが目的なのでご容赦ください。

さてここで目的の文字列、具体的にいうなら「#alias」は、もしかしたら最初にヒットするかもしれません。nとNで探しても見付からないかもしれなません。

ここで見付からない場合「#alias」文字列はありません。そして「ありません」と断言できるのが、文字列検索の利点です。それこそWordやExcel、Chreome、メーラーでも、検索機能があって見付けられない場合は「ありません」と断言できます。

もちろん「# alias」とスペース混じりの文字列は当然あるかもしれませんね、その辺も抑えたい方は、後の補足を読んでください。

目的の場所「#alias」に到着したら、おもむろに x キーを押してください。
私もxがなんの略か知らないですが、バッテン付けるとでも思っておけばいいんじゃないでしょうか?
これで「検索文字列行頭の#」を一文字を消してくれます!

alias dir='dir --color=auto'

このように無事、設定ファイルの編集はできます。

ここで保存するかしないかは、はあなたにお任せします。
念のために「:wq」で「ファイルにwriteしてquitして」、「:q!」で「quitしろ!」です。

ちょっとだけ意識高めの人のために

コメントの後に含まれる空白を許したい、具体的には「# alias」なども含めたいなら

/#\s*alias

のように検索します。
ここで「\s」が「空白系文字タブ含む」、「*」が「0回以上の繰り返し」です。
コレ、0回以上の繰り返しなので、空白がなくてもヒットしますので、定型文として覚えちゃうのもアリでしょう。

これ以上、意識低いままでいたいなら Vim公式ドキュメント 簡単な検索を読んでください。
公式ドキュメントさえ抑えれば、どれほど意識低くても強者っぽい振る舞いができます!
なんといっても、中二病表現をするなら原典ですから。

個人的な見解として、正規表現はどいつもこいつも方言がキツいので、Vimに限らずハマりすぎに注意かなと。
変に懲りすぎない方がよさそうな印象があります。
行頭行末を活用しながら検索や置換を素直にできなければ、なんらか言語を使った方がいいかなって感覚です。
別に計算コストの特筆メリットはないと思います。

ここで、当記事の前言撤回です!

記事の冒頭で書いた「hjkl」で上下左右に移動する操作は、今すぐ思い出してください!
そして「hjkl」の上下左右移動は、使える場所ならガンガン活用してください!

TweetDeckでも、マストドンWeb-UIでも、ブラウザ経由gmailでも上下移動はjとkです。
Googleドライブに至ってはhjkl全部使えますよ。

まったく、みんなほんとにHなJKへのLove過剰なんだから…

蛇足だけど、hは本当にhidariの略じゃないかと思うくらい有名どころのソフトに浸透してます。
たとえばCtrl+hでBackSpaceは、そこそこ由緒正しい操作の印象を受けます。

bashやvimは言うに及ばず、Windowsソフトでも秀丸エディタ、Visual Studio Code、日本語変換ATOKのATOKキーバインドあたりはCtrl+hでBackSpaceの動きをします。

個人的にはCtrl+hをBackSpace統一してほしいのですが、Chromeが「History」に割りあてていたり、他のソフトも使えない場所が多すぎて間違いなく発狂しますので、hjklへの敬愛をこめつつ、今は牙を研ぎましょう。

もちろん若いあなたが、明るい将来を作ると信じていますからね!なんて言葉は胡散臭い政治家っぽいな

さいごに

こういう内容、誰かQiitaに書いてそうで書かれてなかったので、わかる範囲で書きました。
ぶっちゃけ自分もVim初心者です。
我ながらこれは酷いと思ってますが、この記事は基本VS Code使って書いています!

まあ「意識低く」っての、どんどん流用してほしいです。
他の便利ソフトで似たような記事も充実するといいなぁって思っています。
理念とか理想は大切だけど、初学者にとって一番大切なのは「目の前にあるモノを使えるか否か」ですから。
特にEmacs関連は充実してほしいな…(チラッ)

参考文献

  • 「まんがでわかるLinux シス管系女子」Piro著

シス管系女子は、自分電子書籍で買ってしまいましたが紙の本で買ったが融通がきくかもしれません。
Vimに限らずLinuxの入り口、取っ掛かりもわからない人には無条件でお勧めします。

注:宣伝してても、作者との癒着どころか利害関係すらありません。むしろ利害関係や賄賂ほしい…


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>