@ 260802.2
current
local win_move = function(key)
  return function()
    local curwin = vim.fn.winnr()
    vim.cmd.wincmd(key)
    if curwin == vim.fn.winnr() then
      local curview = vim.fn.winsaveview()
      if key == 'j' or key == 'k' then
        vim.cmd.wincmd('s')
      else
        vim.cmd.wincmd('v')
      end
      vim.fn.winrestview(curview)
      vim.cmd.wincmd(key)
      vim.fn.winrestview(curview)
    end
  end
end

vim.keymap.set('n', '<C-W>h', win_move('h'))
vim.keymap.set('n', '<C-W>k', win_move('k'))
vim.keymap.set('n', '<C-W>l', win_move('l'))
vim.keymap.set('n', '<C-W>j', win_move('j'))
vim.keymap.set('n', '<C-left>', function() vim.cmd.wincmd('<') end)
vim.keymap.set('n', '<C-right>', function() vim.cmd.wincmd('>') end)
vim.keymap.set('n', '<C-up>', function() vim.cmd.wincmd('+') end)
vim.keymap.set('n', '<C-down>', function() vim.cmd.wincmd('-') end)