web-dev-qa-db-ja.com

Shellコマンドを使用して改行を削除します(KDEグローバルショートカットで機能する必要があります)

現在の選択範囲のテキストから改行を削除するためのショートカットが必要です。コマンドをKDEグローバルショートカットに入れたいのですが、これはすでに方法を知っています。私が思いついたコマンドは次のとおりです。

sh -c 'xclip -o -sel p | tr -d "\-\n"  | tr "\n" "\ " | xclip -sel c; xdotool key --clearmodifiers ctrl+v'

これは、現在の選択を取得し、それをtrにパイプして、行末のハイフネーションを削除し(そしてフラグメントを結合し)、残りの改行をスペースに置き換え、クリップボードに貼り付けます。 (焦点がどこにあっても)。

問題:改行がスペースに置き換えられていませんtr "\n" "\ "。それを行う代わりに、改行を何も置き換えません。空間のあらゆる種類の表現を試しましたが、どれも機能しません

xdotool typeを試しましたが、trを使用しなくても、すべてのホワイトペースを消費し、すべてを一緒に実行します。

クリップボードの代わりに選択範囲(プライマリまたはセカンダリ)を使用し、可能であればxdotool key ctrl+vを使用する必要がないようにします。私の経験では、予期しない方法で空白を処理するため、xdotoolを完全に回避できればさらに良いでしょう。

xvkbdをインストールしていないので、インストールしたくないです。ただし、それが役立つ場合は、 copyqpython-pyperclip 、または xorg-xclipboard をインストールできます。メインのArchリポジトリにある他のツールも検討できます。

1
MountainX

これが私が思いついたものです:

sh -c 'xclip -o -sel p | Perl -p -e "s/-\n//g"|  tr "\n" " "| xclip -sel c; xdotool key --clearmodifiers ctrl+v'

最初のtrをPerlに置き換えました。 trがシーケンス-\nを文字列ではなく2つの独立した文字として認識していることに気付きました。

私はここでPerlの提案を見つけました:
https://stackoverflow.com/a/7697604/463994

おそらく単一のPerlコマンドでこれを行う方法がありますが、私にはわかりません。私はより良い答えを受け入れます。

編集:Rakesh Sharmaのおかげでより良い解決策があります(コメントを参照):

sh -c 'xclip -o -sel p | Perl -pe "s/-\n// || s/\n/ /" | xclip -sel c; xdotool key --clearmodifiers ctrl+v; xdotool key Alt'

Altキーの組み合わせにショートカットがバインドされており、Altキーをクリアするために必要なため、xdotool key Altを追加しました。

1
MountainX