From 9a302cb6c29a6670da95a6b3d0b9df0090dd0c57 Mon Sep 17 00:00:00 2001 From: Proctor Date: Tue, 18 Apr 2023 19:13:50 -0500 Subject: [PATCH] neovim - smartsplits plugin --- nvim/.config/nvim/fnl/dotfiles/mapping.fnl | 39 ++++++++++--------- .../nvim/fnl/dotfiles/plugin/smartsplits.fnl | 27 +++++++++++++ nvim/.config/nvim/fnl/dotfiles/plugins.fnl | 1 + tmux.conf | 31 +++++++++++++++ 4 files changed, 79 insertions(+), 19 deletions(-) create mode 100644 nvim/.config/nvim/fnl/dotfiles/plugin/smartsplits.fnl diff --git a/nvim/.config/nvim/fnl/dotfiles/mapping.fnl b/nvim/.config/nvim/fnl/dotfiles/mapping.fnl index 7225737..91348f5 100644 --- a/nvim/.config/nvim/fnl/dotfiles/mapping.fnl +++ b/nvim/.config/nvim/fnl/dotfiles/mapping.fnl @@ -79,28 +79,29 @@ ; Trim trailing Whitespace in current line (util.lnnoremap :tw ".s/\\s\\+$//ge:nohlsearch/") +;; (noremap :n : ":echo \"test\"\n") ; Window switching ; ˙ -> alt-h ; ∆ -> alt-j ; ˚ -> alt-k ; ¬ -> alt-l ;; Terminal mode -(noremap :t "˙" "h") -(noremap :t "∆" "j") -(noremap :t "˚" "k") -(noremap :t "¬" "l") -;; Insert mode: -(noremap :i "˙" :h) -(noremap :i "∆" :j) -(noremap :i "˚" :k) -(noremap :i "¬" :l) -;; Visual mode: -(noremap :v "˙" :h) -(noremap :v "∆" :j) -(noremap :v "˚" :k) -(noremap :v "¬" :l) -;; Normal mode: -(noremap :n "˙" :h) -(noremap :n "∆" :j) -(noremap :n "˚" :k) -(noremap :n "¬" :l) +;; (noremap :t "˙" "h") +;; (noremap :t "∆" "j") +;; (noremap :t "˚" "k") +;; (noremap :t "¬" "l") +;; ;; Insert mode: +;; (noremap :i "˙" :h) +;; (noremap :i "∆" :j) +;; (noremap :i "˚" :k) +;; (noremap :i "¬" :l) +;; ;; Visual mode: +;; (noremap :v "˙" :h) +;; (noremap :v "∆" :j) +;; (noremap :v "˚" :k) +;; (noremap :v "¬" :l) +;; ;; Normal mode: +;; (noremap :n "˙" :h) +;; (noremap :n "∆" :j) +;; (noremap :n "˚" :k) +;; (noremap :n "¬" :l) diff --git a/nvim/.config/nvim/fnl/dotfiles/plugin/smartsplits.fnl b/nvim/.config/nvim/fnl/dotfiles/plugin/smartsplits.fnl new file mode 100644 index 0000000..4159d36 --- /dev/null +++ b/nvim/.config/nvim/fnl/dotfiles/plugin/smartsplits.fnl @@ -0,0 +1,27 @@ +(module dotfiles.plugin.smartsplits + {autoload {nvim aniseed.nvim + a aniseed.core + smart-splits smart-splits + ;; util dotfiles.util + }}) + +(smart-splits.setup) + +;; recommended mappings +;; resizing splits +;; these keymaps will also accept a range, +;; for example `10` will `resize_left` by `(10 * config.default_amount)` +(vim.keymap.set :n : smart-splits.resize_left) +(vim.keymap.set :n : smart-splits.resize_down) +(vim.keymap.set :n : smart-splits.resize_up) +(vim.keymap.set :n : smart-splits.resize_right) +;; moving between splits +(vim.keymap.set :n : smart-splits.move_cursor_left) +(vim.keymap.set :n : smart-splits.move_cursor_down) +(vim.keymap.set :n : smart-splits.move_cursor_up) +(vim.keymap.set :n : smart-splits.move_cursor_right) +;; swapping buffers between windows +(vim.keymap.set :n :h smart-splits.swap_buf_left) +(vim.keymap.set :n :j smart-splits.swap_buf_down) +(vim.keymap.set :n :k smart-splits.swap_buf_up) +(vim.keymap.set :n :l smart-splits.swap_buf_right) diff --git a/nvim/.config/nvim/fnl/dotfiles/plugins.fnl b/nvim/.config/nvim/fnl/dotfiles/plugins.fnl index ac1d643..d228969 100644 --- a/nvim/.config/nvim/fnl/dotfiles/plugins.fnl +++ b/nvim/.config/nvim/fnl/dotfiles/plugins.fnl @@ -52,6 +52,7 @@ :lifepillar/vim-solarized8 {} :lukas-reineke/headlines.nvim {:mod :headlines} ; :michaelb/sniprun {:run "bash ./install.sh" :mod :sniprun} + :mrjones2014/smart-splits.nvim {:mod :smartsplits} :neovim/nvim-lspconfig {:mod :lspconfig} :norcalli/nvim-colorizer.lua {:mod :colorizer} :nvim-orgmode/orgmode {:mod :orgmode} diff --git a/tmux.conf b/tmux.conf index ffad76a..c55870c 100644 --- a/tmux.conf +++ b/tmux.conf @@ -1,6 +1,9 @@ set -g prefix C-a unbind C-b +set -g xterm-keys on +set -s extended-keys on + set -g history-file ~/.tmux_history set -s escape-time 1 @@ -58,3 +61,31 @@ set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm' # undercurl support set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' # underscore colours - needs tmux-3.0 set-option -g focus-events on + + +# 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 M-S-h if-shell "$is_vim" 'send-keys M-S-h' 'resize-pane -L 3' +bind-key -n M-S-j if-shell "$is_vim" 'send-keys M-S-j' 'resize-pane -D 3' +bind-key -n M-S-k if-shell "$is_vim" 'send-keys M-S-k' 'resize-pane -U 3' +bind-key -n M-S-l if-shell "$is_vim" 'send-keys M-S-l' 'resize-pane -R 3' + +bind-key -n M-h if-shell "$is_vim" 'send-keys M-h' 'select-pane -L' +bind-key -n M-j if-shell "$is_vim" 'send-keys M-j' 'select-pane -D' +bind-key -n M-k if-shell "$is_vim" 'send-keys M-k' 'select-pane -U' +bind-key -n M-l if-shell "$is_vim" 'send-keys M-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 'M-S-h' select-pane -L +bind-key -T copy-mode-vi 'M-S-j' select-pane -D +bind-key -T copy-mode-vi 'M-S-k' select-pane -U +bind-key -T copy-mode-vi 'M-S-l' select-pane -R +bind-key -T copy-mode-vi 'M-S-\' select-pane -l +