Yo uso Vim Abro un archivo. Lo edito y quiero ver lo que he editado antes de guardarlo.
¿Cómo puedo hacer esto en Vim?
http://vim.wikia.com/wiki/Diff_current_buffer_and_the_original_file
Aquí hay una función y un comando para ver una diferencia entre el archivo editado actualmente y su versión no modificada en el sistema de archivos. Simplemente colóquelo en su vimrc o en el directorio de complementos, abra un archivo, realice algunas modificaciones sin guardarlas y hágalo
:DiffSaved
.function! s:DiffWithSaved() let filetype=&ft diffthis vnew | r # | normal! 1Gdd diffthis exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype endfunction com! DiffSaved call s:DiffWithSaved()
Para salir de la vista de diferencias, puede usar el
:diffoff
comando.A continuación se muestra una función similar, adaptada para imitar el
'cvs diff'
comando ...
:w !diff % -
superior cuando usas vim en una gran cantidad de cajas en constante cambio por las que no puedes cambiar fácilmente el .vimrc? (Siempre que tengan instalado diff.)fuente
diff
.%
se refiere a la ruta de archivo abierta actualmente. ¿Por qué todo esto es un argumento para el:w
comando? Además, ¿cómo-
se asigna al contenido del búfer de trabajo? ¿Es eso automático en vim, que el contenido del búfer (o tal vez un rango específico en el búfer) se asigne a stdin para los comandos de shell?:w
porque estamos escribiendo el archivo en el comando ( activadostdin
). En el comando,-
le dice que leastdin
.:w !git diff % -
úselo para una versión coloreada, si tiene instalado git!fatal: bad flag '-' used after filename
cuando ejecuto:w !git diff % -
.Porque algunas personas preguntaron acerca de una explicación para el comando
Aquí está mi intento de escribir una respuesta más detallada:
Supongo que está trabajando en un sistema
cat
eecho
instalado (por ejemplo, casi cualquier GNU / Linux, Mac OS, BSD y otros sistemas similares a UNIX).El comando anterior funciona de la siguiente manera:
La sintaxis para guardar un archivo en vim es:
La sintaxis para ejecutar un comando de shell en vim es:
Dentro del entorno de shell emitido por vim
%
sucede que apunta al nombre de archivo actual. Puede verificar esto ejecutando lo siguiente:Esto debería generar el nombre de archivo (o un error, si vim se ejecutó sin un nombre de archivo).
Usando cat también podemos generar el contenido del archivo:
Esto debería devolver el contenido de los archivos en su último estado guardado o un error si nunca se ha guardado.
El programa diff puede leer desde la entrada estándar (stdin). Su página de manual dice lo siguiente:
La ejecución del comando guardar sin un nombre de archivo, sino más bien un comando de shell detrás de él, hace que vim escriba el contenido de los archivos en stdin del shell en lugar de guardarlo en un archivo físico. Puede verificar esto ejecutando
Esto siempre debe imprimir el contenido actual de los archivos (que en su lugar se habría escrito en un archivo).
Poniéndolo junto (o tl; dr): el archivo se "guarda" en stdin, diff se ejecuta con el nombre de archivo y stdin como entrada.
Saber esto también podría comparar archivos con vimdiff haciendo algo como esto: esta es solo una idea que no desea hacer esto:
(Luego abra readonly y cierre vimdiff usando
:qall
)fuente
vim - -c ":vnew $1 |windo diffthis"
, hacerlo ejecutable, guardarlo en la RUTA como, por ejemplo,vimdiffWithStdin
y luego compararlo con el siguiente comando en vim::w !vimdiffWithStdin %
:w !vimdiff % /dev/stdin
. No sé si existe un truco similar para Windows.Siempre me han gustado los cambios : agradable, simple, funciona.
fuente
:DiffChangesDiffToggle
.de vimrc_example.vim:
fuente
w !diff % -
es que funciona las fuentes más remotas también (por ejemplo:vim sftp://example.com/foo.txt
)Obtenga lo siguiente y use: comando DIFF
fuente
No es exactamente lo que estás buscando, pero SCMDiff.vim es realmente genial. Una pulsación de tecla, y resalta su archivo actual con la revisión de la cabeza en un repositorio de control de fuente. Está destinado a funcionar con muchos SCMS. Lo uso con fuerza.
fuente
Hay un complemento, basado en diferentes respuestas aquí: https://github.com/gangleri/vim-diffsaved
Proporciona el
:w !diff % -
método y el más complicadodiffthis
.Aparte de eso, unotree permite esto también, pero también mucho más (difiere entre diferentes puntos de control de deshacer). Similar a Gundo .
fuente
Puedo recomendar el complemento histwin .
Si bien no difiere de la versión guardada actual del archivo (como las otras respuestas), puede modificar los cambios desde que comenzó a editar e incluso reproducir los cambios en orden. La diferencia se muestra si ahorra de forma intermedia.
Además, muestra una lista de todas las ramas del historial de deshacer y le permite cambiar o diferenciar entre ellas.
PD: Si bien el complemento no rastrea automáticamente los momentos en el historial de edición desde cada cambio de archivo, puede "etiquetar" explícitamente el momento en que guarda el archivo para que luego pueda verlo, si así lo desea. Tal vez esto podría ser automatizado?
fuente
Si desea usar vim para comparar, como en vimdiff, puede hacer algo como esto:
Edite su .vimrc y agregue:
A partir de ahí, verá sus cambios y puede salir de la vista de diferencias usando
qall
como en vimdiff presionando F8 en modo comando. Reemplace F8 con cualquier tecla que desee.Editar: Se agregó -M para no permitir ninguna modificación, ya que no se guarda.
fuente
Vim: Error reading input, exiting...
alguna idea de lo que está mal aquí?git admite el siguiente comando
:w !git diff --no-index -- % -
asignarlo a un comando agregando lo siguiente a su ~ / .vimrc
command GitDiff execute "w !git diff --no-index -- % -"
Ahora ejecutar se
:GitDiff
convierte en un pequeño comando útil para mostrar rápidamente la diferencia antes de cada guardado.fuente
Puede hacer que vim cree una última copia de seguridad y una copia de seguridad original con:
A partir de entonces, puede abrirlos en una división:
Y a partir de ahí hacer:
Si no tiene restos, pero quiere vimdiff, también puede hacer lo siguiente:
y luego hacer: diffthis en cada división
fuente
Los cambios que acaba de editar [ tampón ], es decir, aquellos que difieren de la última versión guardada (en el trabajo dir ectory), éstos pueden diferir con la última versión de índice ( Git ). Mapeé ambos:
Ejemplo de vimdiff vs Gdiff.
Además, para facilitar el
vimdiff
archivo de homónimo en otra ruta:fuente
Gdiff
si es posible y de lo contrario (por ejemplo, no es un proyecto Git) y luego realizar a:vimdiff
. Contry-catch-endtry
. Pero de esta manera:DiffWithSaved
en un proyecto Git se carece.Siga lo anterior sugiere que uso git diff que me gusta mucho:
fuente