tmux 配置取决于操作系统

tmux 配置取决于操作系统

我的命令中有几行tmux.conf我希望仅在我的操作系统是 Mac 时执行。但是,我想tmux.conf在多个不同的操作系统上使用我的命令。如何使命令以 tmux 当前运行的操作系统为条件?

答案1

使用if-shell命令:

if-shell "uname | grep -q Darwin" "tmux-cmd1; tmux-cmd2;" "tmux-cmd3; tmux-cmd4"

您可能希望将特定于操作系统的命令放在单独的文件中,并通过“源文件”命令执行它们。

if-shell "uname | grep -q Darwin" "source-file .tmux-macosx" "source-file .tmux-linux"

答案2

吉梅https://github.com/jimeh/dotfiles/commit/3838db8有答案。此外,Chris Johnsen 也因帮助人们解决 GitHub 问题而功不可没:https://Github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/8#issuecomment-4134987

基本上,您设置了一个名为的 shell 脚本safe-reattach-to-user-namespace,用于检查是否存在真正的重新连接...命令。

#! /usr/bin/env bash

# If reattach-to-user-namespace is not available, just run the command.
if [ -n "$(command -v reattach-to-user-namespace)" ]; then
  reattach-to-user-namespace $@
else
  exec "$@"
fi

答案3

if-shell 检查必须是字符串,并且要运行的命令必须括在 中{}。下面是如何绑定]键以粘贴系统剪贴板的示例,命令因操作系统而异。

if-shell 'uname | grep -q Linux' { bind-key ] run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer" } 
if-shell 'uname | grep -q Darwin' { bind ] run "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer" }

相关内容