我今天花了相当多的时间为macOS编写了一个简单的zsh实现;用法如下:
example command: git commit -m "Changed a few things"
command that copies: c git commit -m "Changed a few things"
# The second command does not actually execute the command, it just copies it.
# Using zsh, this should reduce the whole process to about 3 keystrokes:
#
# 1) CTRL + A (to go to the beginning of the line)
# 2) 'c' + ' '
# 3) ENTER
preexec()
是一个 zsh 钩子函数,当你按下回车键时会被调用,但在命令实际执行之前。
由于 zsh 去除了某些字符的参数,例如 '"',我们将要使用preexec()
,它允许您访问未处理的原始命令。
伪代码是这样的:
1)确保命令'c '
在开头
2)如果是这样,将整个命令逐个字符地复制到临时变量
3) 将 temp 变量通过管道传输到pbcopy
macOS 的复制缓冲区中
真实代码:
c() {} # you'll want this so that you don't get a command unrecognized error
preexec() {
tmp="";
if [ "${1:0:1}" = "c" ] && [ "${1:1:1}" = " " ] && [ "${1:2:1}" != " " ]; then
for (( i=2; i<${#1}; i++ )); do
tmp="${tmp}${1:$i:1}";
done
echo "$tmp" | pbcopy;
fi
}
继续将上述两个函数粘贴到您的 .zshrc 文件中,或者您想要的任何位置(我将我的放在我的.oh-my-zsh/custom
目录中的文件中)。
如果有人有更优雅的解决方案,请说出来。
任何要避免使用鼠标的东西。