¿Forzando a vimdiff a envolver líneas?


Cuando diffing 2 archivos en VIM, prefiero que las líneas se envuelvan. Sin embargo, vimdiff establece wrap en off de forma predeterminada.

¿Hay alguna forma de establecer el ajuste de línea automáticamente para cada diff?

Author: Sven, 2013-05-30

5 answers

Utilizo lo siguiente:

autocmd FilterWritePre * if &diff | setlocal wrap< | endif

FilterWritePre se activa inmediatamente antes de que se escriba un diff generado en el búfer, y setlocal wrap< copia el valor global de wrap. Por supuesto, también es posible simplemente forzar setlocal wrap.

 29
Author: Nikita Kouevda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-26 20:29:48

Puedes poner lo siguiente en tu vimrc.

au VimEnter * if &diff | execute 'windo set wrap' | endif
 20
Author: user2442259,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-01 01:03:12

Cuando vim ya está iniciado, los comandos para iniciar un diff y un wrap son, en cada uno de los archivos de la ventana dividida:

:diffthis
:set wrap

Sin embargo, el diff+wrap se muestra incorrectamente:

Si tiene una línea larga en un archivo, y una línea corta o faltante en el otro, entonces la línea larga ocupará, digamos, 2 líneas en el primer lado, por la línea corta o faltante solo ocupará 1 línea en el segundo lado.

Esto resulta en un desplazamiento vertical de los 2 archivos. Claro, los colores ayuda a compensar visualmente este cambio. Pero sobre varias líneas de diff, el desplazamiento puede ser mayor que la altura de la ventana, haciendo que diff sea ilegible.

Así que la pregunta no está totalmente resuelta... Por favor avise.

 14
Author: Sylvain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-11 15:41:39

Tuve que resolver esta pregunta para una demo donde quería vimdiff envolver solo cuando se lanzó desde un determinado terminal.

Finalmente recurrí a lo crudo:

alias vimdiff='vimdiff +"windo set wrap"'
vimdiff file.orig file
 3
Author: Sylvain Leroux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-02 14:48:38

Puede ejecutar esto

vimdiff -c 'set wrap' -c 'wincmd w' -c 'set wrap' file1 file2
 2
Author: nos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-26 17:17:05