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

ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

Re: vim ヤンクとクリップボードまわり

誰かに見てもらえてるって嬉しい

こちらの方に過去記事リンク貼っていただいた!! baqamore.hatenablog.com
過去記事はこちら。
tokixy56.hatenablog.com

リンク貼ってもらったからには、自分でもいろいろ検証すべきだなと考え、動作確認してみたら、確かにダメだった…

問題の動作はこうだ。

makefile
LD_PATH = "firmware/loader"
OS_PATH = "firmware/os"
MAKECMD = "make"
...
# ----- bootloader make -----

.PHONY: loader
loader :
    cd $(LD_PATH); make

# ----- operating system make -----
.PHONY: os
os :
    cd $(OS_PATH); make
...

上記のmakefileなどがあったとして、コメント部分以外のmakegmakeに変えたい時とかよくやるのは、

  1. MAKECMD = "gmake"に書き換え
  2. gmake上で yw して単語をコピー
  3. / で書き換える内容(make)を検索
  4. n で書き換える単語へ移動
  5. コメント部分のmakeは通過するのでもう一回 n
  6. vw して単語を選択
  7. p で書き換え
  8. n で書き換える単語へ移動
  9. コメント部分のmakeは通過するのでもう一回 n
  10. vw して単語を選択
  11. p で書き換え
  12. 繰り返す

というのをよくやる。

この場合、ボクの過去記事の設定では、末尾の単語を書き換えようとするとid:wooweezooweeさんの言及するように前後が入れ替わるような具合で動作する。 上記の場合だと、

makefile置換後
# makeの前にあったスペースがgmakeの後ろに動く
    cd $(LD_PATH);gmake 

これは、ノーマルモードだとカーソル位置が文字と文字の間にあるのではなく、文字の上にあるため、末尾を切り取った際にカーソルが後ろにずれる、ことが原因で起こる。 この説明だとものすごくわかりにくので、元のvnoremapをコメントアウトして、すべて手動で動作確認してみるとわかりやすい。

そこで、ボクの提案する苦肉の解決策は下記だ。

vimrc
" ビジュアルモード時の置換貼り付け
vnoremap  <silent>  p   ""c<C-r>+<ESC>
" ビジュアルモード時の置換書き換え
vnoremap   <silent> c   ""c

選択範囲をcで切り取り、インサートモードに入り、<c-r>でペーストしてインサートモードを抜ける…。 ちょっとクリーンな動作じゃないけど目的の動作は果たしてくれるから、まぁ良しとしよう…

また、これだと複数行をペーストするときにインデントが崩れまくる。

vim ペースト 崩れる

とかで検索するとめっちゃ出る。 これを回避するには、

vimrc(インデント崩れ対応)
" ビジュアルモード時の置換貼り付け
vnoremap <silent> p <esc>:set paste<cr>gv""c<C-r>+<ESC>:set nopaste<cr>

どんだけやねんーぷ、となるがこれで複数行ペースト時も崩れないだろう。

DragonFlyBSDが気になって仕方がない

全然関係ない話だが、DragonFlyBSDが気になって仕方がない。
あとjail
仮想化じゃないくてLinuxバイナリがそのまま動くからパフォーマンスは最高らしい。
よし、頑張ってノートPCにインストールして、泣きを見ようかと思う。