Vimのヤンクレジスタを使いこなしたい

大学4回生からプログラミングを始めて、Atoms、Sublime Text、VS Code、IntelliJといろんなエディタを触ってきましたが、社会人になってからVimをずっと使い続けています。 最初は慣れないキーストロークでノロノロコーディングするのが苦痛でしたが、今ではVim以外でトラックパッドを触るのがめんどくさいと感じるようになってきました。 といってもまだまだVimを使いこなせておらず、工夫すれば簡単に終わりそうな操作があってもコーディングに集中したく、Vimの使い方を調べることは少ないです。 しかし、よくある操作でいつもうまくできない「単語をコピーして入れ替える」についてやっとちゃんと調べることにしてみました。 参考 この本の抜粋になります。 https://www.amazon.co.jp/dp/4048916599/ よくある間違い キーストロークバッファの内容yiwcollection = getCollection();process(somethingInTheWay, target);jwwcollection = getCollection();process(somethingInTheWay, target);diwcollection = getCollection();process(, target);Pcollection = getCollection();process(somethingInTheWay, target); 初期の頃にやっていたとてもあるあるの行動です。ただ単語を削除してヤンク(コピー)した単語をはりつけたいだけなのですが、単語を削除した際に無名レジスタに削除した単語が格納されてしまうため、そのままPut操作を行うと、削除した単語が貼り付けられてしまいます。 Visual modeを使った回避策 いままでよくやっていたのがこの方法です。 キーストロークバッファの内容yiwcollection = getCollection();process(somethingInTheWay, target);jwwcollection = getCollection();process(somethingInTheWay, target);vecollection = getCollection();process(somethingInTheWay, target);pcollection = getCollection();process(collection, target); こうすると選択対象と削除とヤンクした単語の貼り付けが同時に行われるので、削除した単語がはりつけられることはなくなります。しかし、入れ替えたい対象が2箇所以上あった時に、この操作をした後にはすでに無名レジスタには somethingInTheWay が格納されてしまっています。 ブラックホールレジスタを使った回避策 Vimには "_ というブラックホールレジスタ(消去専用レジスタ)が用意されています。保存したいわけではなくただ削除したのであれば、このレジスタにつっこめばいいわけです。これを使うと、先ほどの問題が解決します。 キーストロークバッファの内容yiwcollection = getCollection();process(somethingInTheWay, target);jwwcollection = getCollection();process(somethingInTheWay, target);"_diwcollection = getCollection();process(, target);Pcollection = getCollection();process(collection, target); ただちょっとめんどくさいですよね? いちいち単語を削除するときはブラックホールレジスタに入れんとあかんから "_ を削除前に指定して…と考えることが多くなります。 ヤンクレジスタを使った回避策 おそらくこれが正解です。 キーストロークバッファの内容yiwcollection = getCollection();process(somethingInTheWay, target);jwwcollection = getCollection();process(somethingInTheWay, target);diwcollection = getCollection();process(, target);“0Pcollection = getCollection();process(collection, target); ...

August 13, 2022 · 1 min