きみはねこみたいなにゃんにゃんなまほう

ねこもスクリプトをかくなり

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

これを以下のように登録する。

f:id:lightbulbcat:20220102185952p:plain

これで変換しながらクリップボードに登録できるようになった。

バリエーション

他言語の置換ワンライナーも作っていく。

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の数が増えてくるとメニューがいっぱいになってくるので、一つにまとめられたら良いが何かいい方法はないだろうか。

f:id:lightbulbcat:20220111010145p:plain