Você pode usar os seguintes mapeamentos para fazer isso. (Pode haver alguns casos de borda que eu não pensei)
nnoremap <leader>d m':exec '/\%' . col(".") . 'c\S'<CR>''n
nnoremap <leader>u m':exec '?\%' . col(".") . 'c\S'<CR>''n
A parte importante é :exec '/\%' . col(".") . 'c'
Isso corresponde à coluna atual. Isso é obtido diretamente de :h %c
. Então eu adicionei um \S
para corresponder aos espaços não brancos. m'
e ''
é usado para armazenar a posição atual e restaurá-la em torno da instrução de execução. Isso é necessário, pois o uso da execução nos coloca no início da linha, o que poderia levar a um comportamento errático (ignorando muitas linhas em alguns casos). Depois de executar isso, vou para a primeira correspondência com n
. A única diferença entre a versão para cima e para baixo é a direção em que procuramos /
para baixo e ?
para cima.
Se você quisesse fazer isso com colunas virtuais (ou seja, guias), substitua \%c
por \%v
.