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
页面。