Como você retorna de 'gf' no Vim

187

Estou usando o Vim para Windows instalado no modo Unix. Graças a este site, agora uso ogf comando para ir para um arquivo abaixo do cursor.

Estou procurando um comando para:

  1. retorne ao arquivo anterior (semelhante a Ctrl+ Tpara ctags) ou
  2. remapear gf para iniciar automaticamente o novo arquivo em uma nova janela.
JayG
fonte

Respostas:

294

Eu uso Ctrl-O

piada
fonte
43
CTRL-O para ir para uma posição mais antiga na lista de atalhos, <Tab> ou CTRL-I para ir para uma posição mais recente.
Sébastien RoccaSerra 26/09/08
4
@ g33kz0r o mnemônico seria O = OUT, I = IN => Ctrl - O traz você para fora, Ctrl traz você para dentro. Se todo salto é como passar por uma porta, é claro.
Kronn
CTRL-O vai pular para a última posição visitada, isso é irritante quando o novo arquivo é pesquisado. Prefiro Shift-Ctrl-6 (no meu caso, Ctrl-6 não funciona)
Adriano
71

Eu freqüentemente uso Ctrl- 6para isso.

É útil porque me permite pular rapidamente entre os dois arquivos.

Dominic Dos Santos
fonte
47

Você pode usar CTRL-W gfpara abrir o arquivo em uma nova guia.

Você pode fechar o arquivo recém-aberto como sempre com :bd, ou usar CTRL-6e outras formas usuais de alterar buffers.

Roman Odaisky
fonte
7
guia é mais conveniente do que o buffer para mim, e usar nnoremap gf <C-W>gfpara abrir uma nova guia pode ser melhor.
Searene
13

Use gf para descer em um arquivo e use: bf para voltar

RAM
fonte
1
Eu tinha duas janelas abertas em uma guia e isso abriu a segunda janela na primeira vez, em vez de voltar para o buffer anterior.
Kenny Evitt
12

Basta usar :e#seguido por Enter- que basicamente diz para editar o último arquivo (mais recente).

paxdiablo
fonte
9

Ctrl-Shift-6 é um.

:e#↲ é outro.

tzot
fonte
8
A mudança não é necessária. Pare de abusar dos seus dedos.
Zathrus 25/09/08
6
Hum. Eu sou meio que um velho temporizador. O Ctrl-6 não funcionaria com o vi no terminal Wyse que eu costumava trabalhar anos atrás. Veja, algumas coisas permanecem gravadas. E não usar Shift nesse combo dificilmente faria diferença para o meu abuso total de dedos. Ei, pelo menos você tentou o seu melhor. HTH. MÃO.
tzot 25/09/08
Isso muda para o que é chamado de arquivo alternativo .
jpaugh
5

Eu tenho CTRL-W f para trabalhar.
É bastante deprimente que passei tanto tempo aperfeiçoando mapas para esses comandos apenas para descobrir que existem versões internas.


fonte
5

Não sei a resposta para a parte 2 da sua pergunta, mas posso ajudar na parte 1. Use

:e#

O Vim mantém uma lista de arquivos (buffers) que estão sendo editados. Se você digitar

:buffers

listará todos os arquivos que você está editando no momento. O arquivo nessa lista com um% ao lado é o arquivo atual. Aquele com o # ao lado é o arquivo alternativo. : e # alterna entre o arquivo atual e o alternativo. Em vez de digitar muito, mapeio F2 para: e # para que eu possa alternar facilmente entre os arquivos atuais e os alternativos. Mapeio o comando para F2 adicionando-o ao .vimrc

nmap `<F2> :e#<CR>`
codebunny
fonte
2
Eu não acho que você queira usar: e # porque isso poderia recarregar o arquivo. : b # faz o equivalente sem esse problema.
lambacck
Bom ponto. Isso muda para o outro buffer sem recarregá-lo.
Codebunny
2

Quando você abre um novo arquivo (com gf ou : n ou outro comando), o arquivo antigo permanece em uma lista de buffers. Você pode listar arquivos abertos com : ls

Se você deseja navegar facilmente entre os buffers no vim, é possível criar um mapeamento como este:

nmap <M-LEFT> :bN<cr>
nmap <M-RIGHT> :bn<cr>

Agora você pode alternar entre buffers com Alt + seta para a esquerda ou Alt + seta para a direita.

A documentação completa sobre mapeamentos está aqui:

:help map.txt
Oli
fonte
0

Eu não olhei para o seu comando gf, mas imagino que ele use o comando : e ou : find .
Supondo que isso esteja correto, basta substituir o : e ou : find por : new (ou : vnew para uma divisão vertical) e o arquivo será aberto em uma nova janela em vez da mesma.

por exemplo

"Alternar entre cabeçalho e cpp
nmap, s: encontre%: t: ​​r.cpp <CR>
nmap, S: novo%: t: ​​r.cpp <CR>
nmap, h: encontre%: t: ​​rh <CR>
nmap, H: novo%: t: ​​rh <CR>
nmap, F: new = expand ("<cfile>: t") <CR> <CR>
nmap, d: new = expand ("<cfile>") <CR> <CR> 


fonte
2
gfestá embutido. Pertence a todos nós. :-)
jpaugh