neputa note

Win-Linux間のコピペ「^M」問題の対処について

初稿:

更新:

- 3 min read -

img of Win-Linux間のコピペ「^M」問題の対処について

記事概要

WSL2が非常に使いやすく、WindowsとLinux間におけるデータのやり取りが増えた。

しかし異なる環境ゆえに起こる問題もある。当初ストレスに感じていたのがこれ。

Windowsで作成したファイルの改行コードはCR+LFだ。これに対して、Linuxの改行コードはLFだけなので、ファイルの転送方法によってはWindowsで作成したテキストファイルをviで開くと、すべての行末に「^M」が表示される場合がある。
ITmediaより引用

いま行っている対処を記しておく。

「^M」発生シチュエーション例

私のよくある例として、Windowsで起動しているブラウザ上のテキストを、WSL2で起動しているVSCode+Neovim拡張機能のエディタにコピペする場合。

ブラウザは「CR+LF」、VSCodeは「LF」。

よって、うっかり「p」コマンドで貼り付けてしまったりすると、もれなく改行部分に「^M」が付されてしまう。

対処方法

ペースト後の対処

すでに貼り付けてしまった場合、undoしたりむやみに削除するとNeovimが認識する状態と表示状態に齟齬が生じ、詰む。

速やかに置換コマンドを実行し、「^M」を一括削除する。

code
:%s/\r//g

^M(\r)を、空文字「//」で、一括置換「g」する

ペースト前の対処

  • 「shift + insert」でペーストする。
  • VSCodeのペースト「ctrl + shift + v」でペーストする。

まとめ

現状これで対処している。 普通に「p」でペーストし改行コードの差を設定で吸収できたらと思うが実現できていない。

参考サイト

clipboard - How do you know when to use SHIFT+INSERT vs CTRL-V vs right-click-paste to paste? - Ask Ubuntu

目次