Como obter o vim para manter a posição do cursor ao abrir uma divisão

2

Quando eu abro uma divisão vertical no vim, ela pega minha linha atual e a coloca no topo do buffer (rolando todo o arquivo para cima). Como obtenho o vim para manter sua posição atual?

    
por cmhobbs 02.08.2012 / 18:50

2 respostas

1

EDIT: RESPOSTA REAL : consulte

TLDR : Esse comportamento ocorre apenas na primeira vez em que uma nova janela é criada. Se você fechar a janela e fazê-lo novamente, o cursor no novo buffer será o mesmo do buffer antigo. A resposta lá foi para fazer algo inútil que abre, então fecha uma janela e, em seguida, para fazer sua divisão vertical.

Veja outro mapeamento de .vimrc que envolve a resposta do stackoverflow para fazer isso para você:

map <C-S-O> :tabnew<CR>bwipeout<CR>:vs<CR>

Então, quando você pressionar ctrl-shift-o , ele abrirá uma nova guia em branco ( :tabnew<CR> ), excluirá o buffer ( :bwipeout<CR> ) e fará sua divisão vertical ( :vs<CR> )

Espero que isso seja melhor - funciona perfeitamente para mim. Obrigado por me fazer querer descobrir algo utilizável para contornar este comportamento irritante!

Isso acontece o tempo todo para mim! Eu recentemente surgiu com uma resposta que funciona na maioria das vezes (melhor do que nada embora). Coloque isso no seu .vimrc :

map <C-S-O> mmH:vs<CR>'m<C-W>l'm<C-W>h

Toda vez que você pressionar ctrl+shift+o , ele deve fazer uma divisão vertical e colocar o cursor na mesma linha e coluna que você tinha no buffer original antes de dividir.

O comportamento em vim que isso tenta resolver é quando o buffer que você está editando é maior do que pode ser exibido atualmente. Dependendo de onde o cursor está no buffer (exatamente no meio, metade superior, metade inferior), uma vez que você faz um :vs (divisão vertical), ele deslocará o novo buffer para baixo ou até onde achar melhor .

O mapeamento .vimrc acima está fazendo:

map <C-S-O>                                     map ctrl-shift-o to run this

            mm                                  mark the current cursor position

              H                                 move the cursor to the top of
                                                the buffer

               :vs<CR>                          do a vertical split

                      'm                        move to line and column of mark

                        <C-W>l                  move focus to the right to the
                                                original buffer

                              'm                move the cursor in the orig buffer
                                                back to the marked position

                                <C-W>h          move back to the new buffer on
                                                the left

Mais uma vez, funciona a maior parte do tempo para mim, não sei por que não funciona o tempo todo. De qualquer forma, espero que isso tenha ajudado alguns

    
por 06.08.2012 / 23:47
0

Isso pode estar acontecendo porque você tem linhas longas que estão sendo agrupadas pela divisão vertical. Se você :set nowrap e :vsp perceberá que isso não acontece.

    
por 03.08.2012 / 23:43