🖥

Mac — Vimでクリップボードのテキストを直接編集する

に公開

pbpaste と pbcopy をうまく組み合わせれば出来るはずと思って試した結果。

結論から先に書く

function pbvim (){
  readonly pbvim_tmp_file=./.pbvim.tmp

  pbpaste | vim - +"w $pbvim_tmp_file"
  cat "$pbvim_tmp_file" | tr -d "\012"| pbcopy # tr は末尾の改行を削除するため

  rm -f "$pbvim_tmp_file"
}

上記の関数を rc ファイルに追加する。 ( e.g ~/.bashrc ~/.zshrc )

シェルを再起動して pbvim を実行すると、vimでクリップボードのテキストを直接編集して上書き出来る。

ccc/pbvim at master · YumaInaura/ccc

ステップ解説

Step. 標準出力からVim編集を開始する

pbpaste | vim -

ただ、このやり方だとファイル名を渡していないため、そのままだと編集できない

Step. Vimにファイルパスを渡す

pbpaste | vim - +"w some_filepath"

「シェルから実行するvimコマンド」の引数として「vim 内部のコマンド」を渡す。

:w some_filepath という「vim内部のコマンド」がファイル編集前に実行される。 ( some_filepath という名前で編集内容を保存 )

Step. 一時ファイルを利用

vimでの編集内容を pbcopy コマンドに標準入力として渡したいが、
vim コマンドはファイル内容を標準出力するわけではないので、ここでは一時ファイルを利用する。

  1. 一時ファイルを作成
  2. pbpaste での標準出力をvimに渡す
  3. vimで編集して一時ファイルに記録された内容を、別コマンド ( cat ) で標準出力する
  4. 標準出力を pbcopy コマンドに渡す
  5. 一時ファイルを削除する

この流れ全体を実行したのが最初の例である。

Versions

  • VIM - Vi IMproved 8.1 (2018 May 18, compiled Aug 7 2018 21:58:18)
  • Max OS X High Sierra

Ref

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2018-08-22

Discussion