diff --git a/.config/nvim/lua/plugins/vim-tmux-navigator.lua b/.config/nvim/lua/plugins/vim-tmux-navigator.lua new file mode 100644 index 0000000..7a5925a --- /dev/null +++ b/.config/nvim/lua/plugins/vim-tmux-navigator.lua @@ -0,0 +1,20 @@ +return { + 'christoomey/vim-tmux-navigator', + cmd = { + "TmuxNavigateLeft", + "TmuxNavigateDown", + "TmuxNavigateUp", + "TmuxNavigateRight", + "TmuxNavigatePrevious", + "TmuxNavigatorProcessList", + }, + keys = { + { "", "TmuxNavigateLeft" }, + { "", "TmuxNavigateDown" }, + { "", "TmuxNavigateUp" }, + { "", "TmuxNavigateRight" }, + { "", "TmuxNavigatePrevious" }, + }, + config = function() + end +} diff --git a/.config/nvim/settings.vim b/.config/nvim/settings.vim index 33857f9..626ea0c 100644 --- a/.config/nvim/settings.vim +++ b/.config/nvim/settings.vim @@ -22,6 +22,8 @@ set hidden set backspace=indent,eol,start set hlsearch set noswapfile +set mouse= "remove mouse +set clipboard=unnamedplus " Rendering set ttyfast @@ -53,7 +55,6 @@ au FileType python \ softtabstop=4 \ shiftwidth=4 \ encoding=utf-8 -\ makeprg=flake8\ % au FileType markdown \ set spell spelllang=en_us diff --git a/.config/tmux/tmux.conf b/.config/tmux/tmux.conf index d7defd5..5b0f32d 100644 --- a/.config/tmux/tmux.conf +++ b/.config/tmux/tmux.conf @@ -16,19 +16,27 @@ bind-key -T copy-mode-vi v send-keys -X begin-selection bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel +# 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 -# VIM like pane moving -bind h select-pane -L -bind j select-pane -D -bind k select-pane -U -bind l select-pane -R -# Remap arrow keys (normally pane switch) to be resize, -# which will now be double-mapped with ctrl+arrow -bind -r Up resize-pane -U -bind -r Down resize-pane -D -bind -r Left resize-pane -L -bind -r Right resize-pane -R set -g renumber-windows on set-option -g allow-rename off diff --git a/.gitignore b/.gitignore index 9d1cc47..275115e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -nvim/lazy-lock.json +.config/nvim/lazy-lock.json +