我需要一个快捷方式来从当前选择的文本中删除换行符。我想将我的命令放入 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
安装,而且我不想安装它。但是,如果有帮助,我可以安装复制q,python-pyperclip, 或者xorg-x剪贴板。我还可以考虑主 Arch 存储库中的其他工具。
答案1
这是我想出的:
sh -c 'xclip -o -sel p | perl -p -e "s/-\n//g"| tr "\n" " "| xclip -sel c; xdotool key --clearmodifiers ctrl+v'
我用 perl 替换了第一个tr
。我意识到将tr
序列-\n
视为两个独立的字符而不是字符串。
我在这里找到了 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'
我添加是xdotool key Alt
因为我有绑定到 Alt 键组合的快捷方式,并且需要清除 Alt 键。