vim move para primeiro não em branco na mesma coluna

4

No vim, como posso mover o cursor para baixo (ou para cima) para a primeira linha contendo um caractere não vazio na mesma coluna?

Por exemplo, no texto a seguir:

item1
    item2
    item3
item4
    item5
    item6

Se o cursor estiver no e in item1 , mova o cursor para e in item4 .

Se no m in item3 , mova para o m in item5 .

FYI, estou procurando uma maneira rápida e eficiente de navegar pelo texto formatado.

(P.S. Esses são espaços e não guias).

    
por Lqueryvg 16.05.2014 / 14:29

2 respostas

1

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 .

    
por 16.05.2014 / 19:17
2

Meu plug-in JumpToVerticalOccurrence oferece ]| e [| mappings que fornecem exatamente isso, suportando [count] e sem sobrescrever o padrão de pesquisa atual.

    
por 16.05.2014 / 21:06

Tags