使用与 Emacs 中相同的键分割 tmux 窗口?

使用与 Emacs 中相同的键分割 tmux 窗口?

C-x 2在 emacs 中,您可以使用(一个在另一个之上)或C-x 3(一个在另一个旁边)来分割窗口。

我怎样才能获得相同的键绑定tmux

此外,一旦窗口被分割,在 emacs 中您可以使用 循环浏览它们C-x o。我可以配置tmux为使用相同的密钥吗?

答案1

现在,梦想成真: https://github.com/tmux/tmux/issues/2904

我的用例是:

  • 如果 tmux 窗格已获得焦点而 emacsclient 未获得焦点(例如,在终端提示符下),请使用 [Cx o] 切换到同一窗口上的下一个 tmux 窗格。
  • 如果 tmux 窗格获得焦点且 emacsclient专注同样,然后让 emacs 处理 [Cx o]。

tmux.conf:

is_emacs='echo "#{pane_current_command}" | grep -iqE "emacs"'
bind -Temacs-keys o if-shell "$is_emacs" "send C-x; send" "select-pane -t :.+"
bind -Temacs-keys Any { send C-x; send }
bind -Troot C-x switch-client -Temacs-keys

初始化.el:

;;; Tmux integration (See tmux.conf for details).
(defun id/other-window ()
  "Switch to the next window if opened, otherwise select next tmux pane."
  (interactive)
  (if (eq (next-window) (get-buffer-window))
      (call-process "tmux" nil nil nil "select-pane" "-t" ":.+")
    (other-window 1)))

(global-set-key [remap other-window] #'id/other-window)

答案2

我使用这个 tmux conf 来模拟与分割相同的行为。使用相同的快捷方式将窗口分成不同的窗格,我将前缀设置为 Cx,并且选择窗格的行为与在 emacs 中处理缓冲区类似。尝试一下,自己修改一下,感觉更舒服。

# remap prefix from 'C-b' to 'C-x'
unbind C-b
set-option -g prefix C-x
bind-key C-x send-prefix

# split panes using 3 and 2
bind 3 split-window -h
bind 2 split-window -v
unbind '"'
unbind %

# switch panes using Alt-arrow without prefix
bind Left select-pane -L
bind Right select-pane -R
bind Up select-pane -U
bind Down select-pane -D

# Enable switch session similar than emacs selecting buffer
unbind s
bind b choose-tree -w

# Kill window
bind k confirm kill-window

# Source the conf file
bind r source-file ~/.tmux.conf

# Use C-x 0 to close panel, similar than emacs when closing the splitted window
unbind 0
bind 0 kill-pane

答案3

看看必读的http://pragprog.com/book/bhtmux/tmux;你会得到你需要的任何东西进一步,试试这个:


# Setting the prefix from C-b to C-d 
# START:prefix
set -g prefix C-d 
# END:prefix 

# Ensure that we can send Ctrl-A to other apps 
bind C-d send-prefix 

# Free the original Ctrl-b prefix keybinding unbind C-b
unbind C-b

bind | split-window -h
bind _ split-window -v

这用于在窗格之间移动:

bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

均来自之前的参考文献和man页面。

相关内容