当前位置: 首页 > news >正文

在命令窗口便捷快速复制输出结果到剪贴板

在macOS上,将命令的输出结果复制到剪贴板

在日常的工作中, 经常使用命令的小伙伴可能会遇到一个场景, 就是把命令执行的结果复制出来另作它用.

每次都需要通过鼠标进行选择然后复制, 虽然 macOS 的命令行的复制快捷键和普通的复制是一样的, 非常友好, 但是还要选择, 还是有些复杂.

当然, 也可以使用 tmux, 然后使用类似 vi 的方式进行选择和复制, 但是操作还是非常多的. 虽然操作多, 但是是可以抛弃鼠标, 也是一个不错的选择.

如果有一种方式只在输入命令的时候假如几个字母就可以做到就更好了.

在 tmux 中对命令窗口的内容进行复制

旧版本的配置:

# use vi mode
set-window-option -g mode-keys vi
list-keys -t vi-copy
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

新版本的配置:

# use vi mode
set-window-option -g mode-keys vi
list-keys -T copy-mode-vi
bind-key -T copy-mode-vi 'v' send -X begin-selection
bind-key -T copy-mode-vi 'y' send -X copy-selection-and-cancel
  1. 进入 copy-mode-vi:在 tmux 中,使用默认的快捷键 Ctrl-b [Ctrl-b PageUp 来进入 copy-mode-vi
  2. 使用 vi 风格的按键操作选择文本。通常情况下,您可以使用 v 键来启动选择模式,然后使用移动键(如 hjkl)来选择文本。
  3. 确保您正确选择了文本。选中的文本将会显示为反白。如果选择不正确,您可以继续使用 vi 风格的按键进行调整。
  4. 一旦您选择了所需的文本,按下 y 键,这将触发 bind-key -T copy-mode-vi 'y' send -X copy-selection-and-cancel 命令。

对于第 3 点要特别说明一下, 不一定按下 y 键, 就可以复制. 和系统里面 vi 设置有关. 例如在 vi 中禁止了 cmd + c 复制, 使用 \+y 复制到剪贴板, 那么在这里就要使用 \+y.

总结:

  • 优点:
    • 这种方式的好处是可能复制命令行里面的任何内容, 而且可以结合 vi 操作, 可以得到自己想要的部分.
    • Linux, macOS 都可以用
  • 缺点: 操作略微多了一些

如果有一个方式可以类似管道一样的操作那点方便很多. 其实 macOS 已经再带了这种命令.

macOS 使用pbcopy命令

  1. macOS自带了 pbcopypbpaste 命令,用于与剪贴板进行交互。要将命令的输出复制到剪贴板,可以使用管道 | 将命令的输出传递给 pbcopy。例如:
your-command | pbcopy

这将把命令的输出复制到剪贴板,您可以随后使用粘贴操作(通常是Command + V)将其粘贴到其他地方。

  1. 使用echo和重定向:
echo "Hello, World" | pbcopy

这将 “Hello, World” 复制到剪贴板。

  1. 使用Shell函数:

您可以将以下Shell函数添加到您的.bashrc或.zshrc文件中,以便更方便地将命令的输出复制到剪贴板:

# Function to copy command output to clipboard
copy_to_clipboard() {"$@" | pbcopyecho "Command output copied to clipboard."
}

然后,您可以使用 copy_to_clipboard 函数来执行命令,并将其输出复制到剪贴板。例如:

copy_to_clipboard your-command

这会将 your-command 的输出复制到剪贴板。

这些方法可在macOS上方便地将命令的输出复制到剪贴板,以便稍后粘贴到其他应用程序中。

这个方式可以用, 但是不可以使用 alias 的命令, 例如 zsh 下常用的 l (l='ls -lah')

改进

  1. 修改一个简单的名字, 便于输入
  2. 结果照样输出
  3. 支持使用了 alias 的命令
copy() {if [[ -n "$1" ]]; thenif alias "$1" &> /dev/null; thenc="$(alias "$1")"c=${c#*=}c=${c#*\"}c=${c%*\"}c=${c#*\'}c=${c%*\'}nc="$c "for arg in "${@:2}"; donc="${nc}${arg} "donenc="${nc% }"eval "$nc" | pbcopyelse$@ | pbcopyfipbpasteecho ""echo "Command output copied to clipboard."elseecho "Usage: copyto <command>"fi
}
http://www.lryc.cn/news/165983.html

相关文章:

  • CUDA小白 - NPP(8) 图像处理 Morphological Operations
  • java获取音频,文本准转语音时长
  • 基于串口通讯的多电机控制技术研究
  • 【深入解读Redis系列】(五)Redis中String的认知误区,详解String数据类型
  • 段指导-示例
  • LeetCode 面试题 04.02. 最小高度树
  • 华为云云耀云服务器L实例评测|初始化centos镜像到安装nginx部署前端vue、react项目
  • python项目制作docker镜像,加装引用模块,部署运行!
  • Redis缓存设计与性能优化
  • 免杀对抗-Python-混淆算法+反序列化-打包生成器-Pyinstall
  • C#__线程池的简单介绍和使用
  • 安全员(岗位职责)
  • unity 使用声网(Agora)实现语音通话
  • vue2.X 中使用 echarts5.4.0实现项目进度甘特图
  • 《PostgreSQL与NoSQL:合作与竞争的关系》
  • 【FAQ】视频监控管理平台/视频汇聚平台EasyCVR安全检查相关问题及解决方法3.0
  • Java 8 新特性解读及应用实践
  • C++项目实战——基于多设计模式下的同步异步日志系统-④-日志系统框架设计
  • 计算机专业毕业设计项目推荐02-个人医疗系统(Java+原生Js+Mysql)
  • Nginx__高级进阶篇之LNMP动态网站环境部署
  • Zebec 生态 AMA 回顾:Nautilus 以及 $ZBC 的未来
  • NXP iMX8MM 修改 UART4至 Cortex-A53 核心
  • C#控制台程序中使用log4.net来输出日志
  • 用GPT干的18件事,能够真正提高学习生产力,建议收藏
  • 线性代数的本质(二)——线性变换与矩阵
  • JavaScript获取字符串的字节长度
  • [2023.09.13]: Rust Lang,避不开的所有权问题
  • Redux中间件源码解析与实现
  • 关于rsync用不了之后
  • 由一个多线程并发保存而引发的思考