Tech Blog.

Thoughts, stories, ideas.

tmux und vim im Homeoffice

24. March 2020

Da ich mit Homeoffice zu einem eher sporadischen Workplace-Setup gezwungen war, habe ich meine Konfigurationen für tmux und vim überarbeitet, um auf meine tägliche Arbeit auf einem einzelnen Laptopbildschirm so angenehm wie möglich erledigen zu können. Dabei hat mich vor allem das Wechseln zwischen tmux-panes und vim-splits am meisten verwirrt. Was die Datei jetzt in einem separaten vim offen oder muss ich die andere Tastenkombination verwenden, um innerhalb von vim zu wechseln? Dazu habe ich vim-tmux-navigator entdeckt. Die Konfiguration ist simpel:

Konfiguration vim

Das vim-tmux-navigator Plugin wird installiert.

vundle

Wer vundle verwendet, fügt die folgende Zeile seiner .vimrc hinzu:

Plugin 'christoomey/vim-tmux-navigator'

Anschliessend wird das Plugin installiert (in vim ausführen):

:PluginInstall

pathogen

Wer pathogen verwendet lädt das Repo in seine Plugins herunter:

$ cd ~/.vim/bundle
$ git clone https://github.com/christoomey/vim-tmux-navigator

Konfiguration tmux

In die Datei ~/.tmux.conf wird folgendes hinzugefügt:

# Smart pane switching with awareness of Vim splits. 
# See: https://github.com/christoomey/vim-tmux-navigator 
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
  | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'" 
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L' 
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D' 
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U' 
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R' 
tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")' if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \
 "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'" 
if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \
 "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'" 
bind-key -T copy-mode-vi 'C-h' select-pane -L 
bind-key -T copy-mode-vi 'C-j' select-pane -D 
bind-key -T copy-mode-vi 'C-k' select-pane -U 
bind-key -T copy-mode-vi 'C-l' select-pane -R 
bind-key -T copy-mode-vi 'C-\' select-pane -l

Jetzt kann zwischen vim- und tmux-Fenstern mit CTRL+hjkl einfach hin- und hergewechselt werden.