diff --git a/modules/cli/default.nix b/modules/cli/default.nix index b0ff0df..f2eed6f 100644 --- a/modules/cli/default.nix +++ b/modules/cli/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ lib, pkgs, ... }: { imports = [ ./kubernetes.nix @@ -120,6 +120,25 @@ set -sa terminal-overrides ",*256color:Tc" # escape-time reduces the time where the escape key acts as an alt key set -s escape-time 1 + ################################################################################ + # 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|l?n?vim?x?|fzf)(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 ''; }; diff --git a/modules/vim/default.nix b/modules/vim/default.nix index e772baa..06061b0 100644 --- a/modules/vim/default.nix +++ b/modules/vim/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ pkgs, ... }: { environment.variables.EDITOR = "vim"; @@ -8,7 +8,9 @@ (lunarvim.override (_: { viAlias = true; vimAlias = true; - globalConfig = builtins.readFile ./init.lua; + globalConfig = builtins.readFile ./init.lua + '' + vim.cmd('source ${pkgs.vimPlugins.vim-tmux-navigator}/plugin/tmux_navigator.vim') + ''; })) (writeShellScriptBin "black" ''