Node.jsのREPL出力を実行可能なJavaScriptとしてコピペする
Node.jsの
% node > > > f = () => { ... ... return 'hello' ... } [Function: f] > >
のような出力を、スクリプト行の >
を外し、評価行をコメントアウトして、JavaScriptとして実行可能な形式にする。
記事をまとめるときに使いたくて作った。
cat <<'EOF' | sed -Ee 's%^%// %g' -e 's%// (>|\.\.\.)( |$)%%g' | grep -E .
これを以下のように使う。
bash-3.2$ cat <<'EOF' | sed -Ee 's%^%// %g' -e 's%// (>|\.\.\.)( |$)%%g' | grep -E . > > > > > > > > f = () => { > ... > ... return 'hello' > ... } > [Function: f] > > > > > EOF f = () => { return 'hello' } // [Function: f] bash-3.2$
無事JavaScriptとして変換された。
f = () => { return 'hello' } // [Function: f]
コンテクストメニューから実行する
コピーから変換までを自動で行うためにmacOSのShortcutsアプリに登録する。
Copy to Clipboard でやろうとしたらクリップボードにはコピーできるけれどそこからペーストできない現象に当たったので pbcopy
を使った。
sed -Ee 's%^%// %g' -e 's%// (>|\.\.\.)( |$)%%g' | grep -E . | pbcopy
これを以下のように登録する。
これで変換しながらクリップボードに登録できるようになった。
バリエーション
他言語の置換ワンライナーも作っていく。
pbpaste | sed ...
のようにすると動作確認が楽にできる。
JavaScript
sed -Ee 's%^%// %g' -e 's%// (>|\.\.\.)( |$)%%g' | grep -E .
Python
sed -Ee 's/^/# /g' -e 's/^# (.*@.*%|>)( |$)//g' | grep -E .
Zsh
変数 PS1
の設定によってカスタムする必要がある。
sed -Ee 's/^/# /g' -e 's/^# (.*@.*%|>|pipe heredoc>)( |$)//g' | grep -E .
これが
asataka@tailmoon ~ % cd tmp asataka@tailmoon tmp % cat <<EOF | cat - pipe heredoc> I im a pipe heredoc> cat pipe heredoc> EOF I im a cat asataka@tailmoon tmp % ls \ > -al total 8 drwxr-xr-x 3 asataka staff 96 Jan 3 19:57 . drwxr-x---+ 44 asataka staff 1408 Jan 10 15:21 .. -rw-r--r-- 1 asataka staff 318 Jan 3 20:56 prototype-chain.js asataka@tailmoon tmp %
こうなる。
cd tmp cat <<EOF | cat - I im a cat EOF # I im a # cat ls \ -al # total 8 # drwxr-xr-x 3 asataka staff 96 Jan 3 19:57 . # drwxr-x---+ 44 asataka staff 1408 Jan 10 15:21 .. # -rw-r--r-- 1 asataka staff 318 Jan 3 20:56 prototype-chain.js
他にやりたいこと
まとめたい
変換Shortcutの数が増えてくるとメニューがいっぱいになってくるので、一つにまとめられたら良いが何かいい方法はないだろうか。