Ao editar o código-fonte usando o gvim (v.7.4.488), quero confirmar algumas alterações no vcs (estou usando o git 2.1.4 na linha de comando no Ubuntu linux).
git --status
mostra quais arquivos eu alterei. No entanto, ele também mostra o vim .*.swp
do (s) buffer (s) atualmente visível (s), se o arquivo contiver alterações não salvas e quando o arquivo editado for igual ao arquivo .*.swp
-file. Obviamente, o git pode ignorar esses arquivos ou o vim pode armazenar os arquivos de troca em um local diferente (consulte vim.wikia ou esta pergunta no stackoverflow ). Mas eu gosto que os .*.swp
arquivos - apareçam git --status
quando contêm alterações não salvas, pois isso indica que estou enviando arquivos em um estado diferente daquele em que eles estão.
Como posso evitar que os falsos positivos de .*.swp
-files apareçam git --status
quando o arquivo salvo é o mesmo que .*.swp
-file, enquanto posso ver que o arquivo a ser confirmado está em um estado diferente daquele que estou editando com o vim?
- É possível ter apenas
.*.swp
-files quando o arquivo no disco e o arquivo no vim são diferentes? - Existe outra maneira de detectar arquivos não salvos?
Combinar os comentários de @elyashiv e @VanLaser resulta em um método mais simples do que detectar se os arquivos de troca implicam arquivos não salvos:
- não deixe o git ignorar os arquivos. *. sw [po];
- ao confirmar, se
git --status
revela algum.*.sw[po]
arquivo -fazer a:wa
no vi; e, - adicionar e confirmar.
:wa
para garantir que não haja arquivos não salvos.git commit
...Respostas:
vim -r
na linha de comando, listará todos os arquivos de troca no diretório atual e nos diretórios temporários e se eles contêm alterações não salvas. Procure a linha que dizmodified: no/YES
.Não sei como dizer ao Vim para procurar em um diretório diferente; portanto, você precisará mudar para cada diretório que contém um arquivo de troca e executar
vim -r
. Você pode criar um script que analise a saídagit status
ou usefind -name '.*.sw[po]'
e executevim -r
em cada diretório para mostrar todos os arquivos de troca com alterações não salvas.(Eu uso em
.*.sw[po]
vez de.*.swp
, porque às vezes os.swo
arquivos são criados além dos.swp
arquivos, quando você edita um arquivo que já possui um arquivo de troca. Os.swn
arquivos também podem ser criados se você editar um arquivo com dois arquivos de troca existentes, mas acho que Eu já vi um na natureza. Se você é realmente paranóico, pode usar.*.sw[a-p]
ou simplesmente.*.sw?
.)Consulte
:help -r
(um pouco) mais informações sobre a-r
opção ou:help recover.txt
mais informações sobre recuperação e troca de nomes de arquivos.fonte
.
à frente do nome do arquivo), portanto o padrão correto seria.*.sw[a-p]
(embora em casos patológicos, você possa realmente chegar até lá.foo.saa
). Isso também deve impedir a correspondência de arquivos Flash, pois duvido que esses normalmente sejam um arquivo oculto..
é necessária em um shell glob, mas*.swp
funciona como argumento parafind
. Mas a liderança.
torna as coisas mais simples. Obrigado!Sim. O trecho abaixo (adaptado do vimrc do tpope ) desativará o arquivo de troca para um buffer quando não for modificado, portanto, os arquivos de troca existem apenas para arquivos modificados.
Advertência : Como o arquivo de troca existe apenas quando o buffer é modificado, você perde o uso do arquivo de troca como um bloqueio consultivo. Se o buffer não for modificado, outro Vim poderá começar a editá-lo sem aviso prévio que ele já está aberto. Se o segundo Vim salvar antes que o primeiro faça mais alterações, elas não serão notadas até que o usuário tente salvar ou algo acione o Vim para verificar se o arquivo foi modificado.
fonte