*winshift.txt* WinShift.nvim Rearrange your windows with ease. Author: Sindre T. Strøm ============================================================================== INTRODUCTION *winshift.nvim* *winshift* WinShift lets you move windows, not only around each other, but also in and out of rows and columns. USAGE *Win-Move-mode* *winshift-usage* Enter Win-Move mode by calling `:WinShift`. This will target your current window for moving. You can move the window either by using |hjkl| or the arrow keys. You can move the window to any of the far ends of the viewport by pressing one of `HJKL`, or shift + any arrow key. Exit Win-Move mode by pressing `q` / `` / ``. CONFIGURATION *winshift-config* Example configuration with default settings: > -- Lua require("winshift").setup({ highlight_moving_win = true, -- Highlight the window being moved focused_hl_group = "Visual", -- The highlight group used for the moving window moving_win_options = { -- These are local options applied to the moving window while it's -- being moved. They are unset when you leave move mode. wrap = false, cursorline = false, cursorcolumn = false, colorcolumn = "", }, keymaps = { disable_defaults = false, -- Disable the default keymaps win_move_mode = { ["h"] = "left", ["j"] = "down", ["k"] = "up", ["l"] = "right", ["H"] = "far_left", ["J"] = "far_down", ["K"] = "far_up", ["L"] = "far_right", [""] = "left", [""] = "down", [""] = "up", [""] = "right", [""] = "far_left", [""] = "far_down", [""] = "far_up", [""] = "far_right", }, }, ---A function that should prompt the user to select a window. --- ---The window picker is used to select a window while swapping windows with ---`:WinShift swap`. ---@return integer? winid # Either the selected window ID, or `nil` to --- indicate that the user cancelled / gave an invalid selection. window_picker = function() return require("winshift.lib").pick_window({ -- A string of chars used as identifiers by the window picker. picker_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", filter_rules = { -- This table allows you to indicate to the window picker that a window -- should be ignored if its buffer matches any of the following criteria. cur_win = true, -- Filter out the current window floats = true, -- Filter out floating windows filetype = {}, -- List of ignored file types buftype = {}, -- List of ignored buftypes bufname = {}, -- List of vim regex patterns matching ignored buffer names }, ---A function used to filter the list of selectable windows. ---@param winids integer[] # The list of selectable window IDs. ---@return integer[] filtered # The filtered list of window IDs. filter_func = nil, }) end, }) < COMMANDS *winshift-commands* *:WinShift* :WinShift [direction] When called without [direction]: starts Win-Move mode targeting the current window for moving. For how to use Win-Move mode, see |Win-Move-mode|. With [direction] perform a one-shot move operation on the current window, moving it in the given direction. [direction] can be one of: `left`, `right`, `up`, `down`, `far_left`, `far_right`, `far_up`, `far_down` The `far_` variants will move the window to the far end of the viewport in the given direction. :WinShift swap Swap the current window with another. When this command is called, you'll be prompted to select the window you want to swap with. A selection is made by pressing the character displayed in the statusline of the target window. The input is case-insensitive. CAVEATS *winshift-caveats* Moving through windows with 'winfixwidth' and / or 'winfixheight' can be a bit wonky. It will work, but it can be a bit hard to follow the movement, and the fixed window might end up with different dimensions after. This is simply a consequence of vim being forced to resize the window due to there not being enough space to adhere to the fixed window's preferred dimensions. vim:tw=78:ts=8:ft=help:norl: