Normalmente trabalho com 2 janelas, divididas verticalmente.
O problema que eu gostaria de resolver é: saltando facilmente do cabeçalho <-> arquivo de implementação
Estou investigando, sem sorte, duas maneiras de fazer isso:
- Abrir arquivo alternativo na janela atual : Existem muitas maneiras de fazer isso, no entanto, não consigo encontrar uma maneira que lembre onde eu estava no arquivo anterior (por exemplo, pule para o cabeçalho, pule para trás, mas não para o mesmo lugar em que estava. )
- Abra um arquivo alternativo na outra janela : Isso está bem definido, já que eu só trabalho com 2 janelas, no entanto, não tenho o conhecimento do vim para fazer isso.
vim-windows
zach
fonte
fonte
:h line()
(solução genérica): "Este comando automático salta para a última posição conhecida em um arquivo logo após abri-lo, se a marca '" estiver definida:: au BufReadPost * if line ("' \ "")> 1 && linha ("'\" ") <= linha (" $ ") | exe "normal! g` \" "| endifRespostas:
Há três etapas principais para realizar o que você está perguntando:
Para encontrar o nome do arquivo alternativo, você deseja dividir o nome do arquivo atual em "raiz" e "extensão". Uma maneira simples de fazer isso é:
Se você souber que apenas alterna entre arquivos
.h
e.cpp
, poderá alterar a extensão de um para outro facilmente:Como alternativa, crie um dicionário que mapeie extensões conhecidas para extensões alternativas potencialmente válidas. Ou use
globpath()
para obter todas as alternativas possíveis para o arquivo atual:e escolha o primeiro, ou o que for. Eu prefiro a
globpath
abordagem, com algumas esperanças extras que descreverei mais adiante. Depois de escolher a extensão de destino, forme o caminho de destino completo:Agora você pode abrir o arquivo alternativo na janela atual:
Ou use
winnr()
para obter o número da "outra janela" (winnr("#")
é a janela para a qual<C-W>p
saltaria, ou você pode codificá-lo se souber que sempre será o mesmo para a sua instalação) e faça algo como:Isso fornece uma solução realmente básica para abrir arquivos alternativos. Existem algumas deficiências com a abordagem acima, desde que eu a escrevi para ser direta e é um pouco improvisada. Eu escrevi um plug - in que alterna a troca de arquivos "do jeito que eu queria" (percorrendo todos os
globpath()
resultados disponíveis ). Ele resolve alguns dos problemas com a simplicidade do exposto acima. Você pode verificar sua implementação se estiver interessado em explorar mais.Finalmente, o ponto "restaurar posição do cursor". Guardei-o por último, uma vez que é ortogonal à coisa de troca alternativa (meu plug-in não lida com isso, por exemplo), mas você pode colocá-lo em sua função se quiser criar o seu próprio.
:help line()
possui um comando automático útil para restaurar a posição do cursor para onde estava quando o arquivo foi aberto pela última vez:Acabei de colocar isso, ou algo muito semelhante, no meu,
.vimrc
já que prefiro o comportamento o tempo todo. Você poderia facilmente colocar o código em outro lugar.fonte
Você pode usar o plug - in vim-fswitch junto com a seguinte configuração no seu
.vimrc
arquivo:Se você digitar
<Leader>
(que é\
, por padrão), seguido des
um.hpp
ou.h
arquivo, o plugin irá verificar se uma correspondência.cpp
,.cc
ou.c
existe arquivo:include
porsrc
no caminho do arquivo atualsrc
pasta acima do arquivo atualHá mais opções que você poderia usar para ajustar melhor seu projeto na documentação . Você levará alguns minutos, mas depois de acertar, você deve amá-lo. Eu, pessoalmente, acho muito flexível e extensível, além de funcionar tão bem para muitos tipos de arquivos (.m, .h, .inl etc ...).
fonte
Na tua
.vimrc
Isso permite que você alterne rapidamente entre janelas, simplesmente usando as teclas de direção Ctrl e VIM na linha inicial. A grandeza disso é que você tem uma maneira comum de pular para qualquer janela, incluindo a janela do quickfix.
Para alternar rapidamente entre o cabeçalho e a fonte que eu uso,
vim-scripts/a.vim
encontrada aqui: https://github.com/vim-scripts/a.vim , use o:A
comando para alternar.Nota lateral => Se você usa o tmux, pode usar https://github.com/christoomey/vim-tmux-navigator para pular entre as janelas vim ou nvim e um terminal sem problemas.
fonte
Vou compartilhar minha versão super rápida e suja ...
Configure meus mapeamentos; alt-o abre o arquivo relacionado na mesma janela, alt-shift-o abre em uma divisão ...
Então eu tenho uma função que obtém a lista de arquivos relacionados. Eu pretendia ajustá-lo para cortar o nome do arquivo no primeiro ponto e não no último, mas ainda é um exercício para o leitor.
Às vezes, minha instalação .vimrc é especializada por cliente; alguns têm origem e incluem hierarquias de pastas separadas, outros têm juntos. Por padrão, suponho que todos estejam próximos, mas se eu precisar caçar, fornecerei uma função de substituição como esta.
Então, olho a lista de arquivos para encontrar o arquivo do buffer atual e vou para o próximo na lista. Geralmente não é tão simples quanto um par .cpp / .h, muitas vezes terei outras coisas que precisam ser consideradas.
E finalmente as duas funções que se abrem na janela atual ou fazem uma divisão ...
Minha versão de divisão sempre coloca os arquivos .cpp e .c em uma divisão abaixo, caso contrário, é o padrão da divisão (que no meu caso é acima).
fonte