Haz que Vim muestre TODOS los espacios en blanco como un personaje

No puedo encontrar una manera de hacer que Vim muestre todos los espacios en blanco como un personaje. Todo lo que encontré fue sobre tabs, espacios al final, etc.

Como otros han dicho, podrías usar

 :set list 

que, en combinación con

 :set listchars=... 

mostrar caracteres invisibles
Ahora, no hay una opción explícita que pueda usar para mostrar espacios en blanco, pero en Listchars, puede establecer un carácter para mostrar para todo, PERO para espacios en blanco. Por ejemplo, el mío se parece a esto

 :set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:< 

entonces, ahora, después de usar

 :set list 

todo lo que no se muestra explícitamente como algo más, es entonces, en realidad, un viejo espacio en blanco simple.

Como de costumbre, para entender cómo funcionan los listchars , use la ayuda. Proporciona gran información sobre qué caracteres se pueden mostrar (como el espacio final, por ejemplo) y cómo hacerlo:

 :help listchars 

Podría ser útil agregar un alternar para que pueda ver los cambios a mitad de la edición fácilmente (fuente: VIM: ¡establecer lista! Como un alternar en .vimrc ):

 noremap  :set list! inoremap  :set list! cnoremap  :set list! 

:set list para habilitar.

:set nolist para deshabilitar.

A partir del parche 7.4.710 , ahora puede establecer un carácter para mostrar en lugar de espacio utilizando listchars.

 :set listchars+=space:␣ 

Entonces, para mostrar TODOS los caracteres de espacio en blanco como un carácter, puede hacer lo siguiente:

 :set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣ :set list 

Discusión sobre la lista de correo: https://groups.google.com/forum/?fromgroups#!topic/vim_dev/pjmW6wOZW_Q

Creo que otras respuestas aquí son más completas, pero pensé que compartiría un truco que usualmente utilizo para diferenciar tabs y espacios visualmente:

 :syntax on :set syntax=whitespace 

Estas son reglas de resaltado de syntax para el lenguaje de progtwigción Whitespace : las tabs se muestran en verde y los espacios en rojo. 🙂

Se puede combinar con :set list como se menciona en muchas otras respuestas, aunque las tabs se mostrarán como ^ I sin una luz verde destacada, pero los espacios se mostrarán en rojo.

:set list mostrará todos los espacios en blanco como un caracter. Todo, excepto un espacio, se verá diferente de su estado normal, lo que significa que si aún ves un espacio antiguo simple, en realidad es un espacio viejo y sencillo. 🙂

Si configuraste:

 :highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none 

y luego realice una búsqueda de un espacio, cada carácter de espacio se mostrará como un carácter de subrayado.

Puede usar este comando en una función útil que alterna “subrayado” de espacios.

 set hls let g:HLSpace = 1 let g:HLColorScheme = g:colors_name function ToggleSpaceUnderscoring() if g:HLSpace highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none let @/ = " " else highlight clear silent colorscheme "".g:HLColorScheme let @/ = "" endif let g:HLSpace = !g:HLSpace endfunction 

Asigna la función a una tecla de método abreviado con:

 nmap   :call ToggleSpaceUnderscoring() 

NB: defina la función en vimrc una vez que se haya establecido el esquema de color.

Dependiendo de sus reglas de syntax para el búfer actual, algo como esto podría funcionar:

 :syn match WhiteSpace / / containedin=ALL conceal cchar=Æ :setl conceallevel=2 concealcursor=nv 

Esto necesita una característica vim 7.3 con + oculto

Actualización 10/24/2014 Para ampliar un poco sobre eso. Por supuesto, es posible definir algunos resaltados para los caracteres conectados.

  • Puede configurar cómo se ven los caracteres ocultos. Para resaltar, deberá configurar al menos una vez el grupo de resaltado ‘Ocultar’ (consulte la ayuda en :h hl-Conceal Esto se puede hacer en su esquema de colores y luego no necesita reconfigurarlo nuevamente. Pero esto afecta a todos los ocultos caracteres (por ejemplo, si su script de syntax oculta algunos elementos más, se mostrarán como sus caracteres en blanco). Esto podría verse así:

    :hi Conceal ctermfg=7 ctermbg=NONE guifg=LightGrey guibg=NONE

  • Parece haber una particularidad de que Vim no resaltará espacios, si el script de syntax usa la palabra clave skipwhite . No habrá forma de evitarlo (quizás esto se solucione, publiqué un parche )

  • Parece que hay un parche flotando, que permitirá personalizar el aspecto de los espacios en modo list . El último al momento de escribir parece ser este . (Esto significa que necesita construir su propio Vim para usar esto).
  • El conceallevel y concealcursor son opciones de ventana local. Eso significa que pueden ser diferentes en diferentes ventanas (y posiblemente también sean configuradas por plugins de tipo de archivo u otros scripts de plugins).
  • Los grupos de resaltado de syntax deben ejecutarse cada vez que se vuelve a cargar un archivo de definición de syntax. Esto podría hacerse usando un BufWinEnter o posiblemente también una Syntax o incluso un FileType . (No he probado cuál realmente funciona).

Los últimos dos elementos significan que tendrías que configurar algunos autocomandos que restablecen las reglas de syntax y las opciones correpondentes. Para el primero, uno podría querer configurar el resaltado usando un ColorScheme (para que los caracteres ocultos siempre se vean iguales, independientemente de lo que realmente se establezca un esquema de color). Para una solución completa, mire la respuesta romaní, eso debería darle un comienzo. Si configura una función, puede configurar fácilmente un comando de alternar para activar o desactivar el resaltado especial.

Actualización 10/26/2014 Hice un complemento de esta pregunta.

Actualización 22/04/2015 Se ha incluido un parche en Vim que lo hace posible usando la opción de list . Simplemente configure set list listchars+=space:␣ Esto funciona a partir de Vim 7.4.711

yo uso esto

 /\s :set hlsearch 

para resaltar espacios en blanco. Busca todos los espacios en blanco y luego habilita el resaltado para que salgan. Sin embargo, no imprime un carácter especial.

Si por espacios en blanco te refieres al carácter ”, mi sugerencia sería simplemente buscar / reemplazar. Como los otros han insinuado, la set list cambia los caracteres que no se imprimen a un carácter visible que está configurado en listchars .

Para mostrar explícitamente espacios como algún otro personaje, algo similar a lo siguiente debería hacer el truco:

:%s/ /█/g

Luego simplemente deshaga el cambio para regresar nuevamente.

(para obtener el █ presioné esta secuencia de teclas exacta :: % s / / CTRL-K F B / g )

Para resaltar espacios, simplemente búscalo:

/

Notas:

  • significa simplemente escribir el carácter de espacio.
  • Habilite el resaltado de los resultados de búsqueda con: establecer hlsearch
  • Para resaltar espacios y tabs:

    / [ ]

    Una forma rápida de eliminar los aspectos más destacados es buscar cualquier otra cosa: / asdf

    (simplemente escriba cualquier lista corta de caracteres aleatorios)

    El siguiente código se basa en la respuesta de Christian Brabandt y parece hacer lo que el OP quiere:

     function! Whitespace() if !exists('b:ws') highlight Conceal ctermbg=NONE ctermfg=240 cterm=NONE guibg=NONE guifg=#585858 gui=NONE highlight link Whitespace Conceal let b:ws = 1 endif syntax clear Whitespace syntax match Whitespace / / containedin=ALL conceal cchar=· setlocal conceallevel=2 concealcursor=c endfunction augroup Whitespace autocmd! autocmd BufEnter,WinEnter * call Whitespace() augroup END 

    Agregue esas líneas a su ~/.vimrc y comience una nueva sesión de Vim para ver la magia aún imperfecta .

    Siéntase libre de editar los colores predeterminados y ocultar el carácter.


    Advertencia: algo en el *FuncBody grupo de syntax de *FuncBody en varios idiomas impide que se muestre el punto medio. No sé (todavía?) Cómo hacer que esa solución sea más confiable.

    Me sentí frustrado con todas las otras respuestas a esta pregunta, porque ninguna de ellas resalta el carácter del espacio de una manera útil. Mostrar espacios como caracteres sería particularmente útil para los lenguajes con formato de espacio en blanco, donde mezclar tabs y espacios es dañino.

    Mi solución es mostrar tabs y subrayar múltiples espacios. Toma prestado de la respuesta de mrucci y de este tutorial . Como usa resaltado de syntax, es persistente:

     set list listchars=tab:\|\ highlight Whitespace cterm=underline gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellow autocmd ColorScheme * highlight Whitespace gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellow match Whitespace / \+/ 

    Al usar esto, las tabs se muestran como | y espacios como _ , lo que hace que sea muy fácil saber cuándo estoy mezclando estilos de código.

    El único inconveniente que he encontrado es que este fragmento no ajusta el color de fondo para que coincida con el contexto (como en un comentario).

    todas las respuestas anteriores intentan hacer espacios visibles desde dentro de vim. Si realmente insistes en tener espacios visibles como puntos, hay otro enfoque …

    Si no se puede hacer en vim, cambie su fuente por completo. Copié la fuente Ubuntu One Mono y la edité usando FontForge. Recuerde cambiar el nombre completo de la fuente, la familia, la familia preferida, la compatibilidad completa (en FontFoge está bajo Nombres TTF en la información de la fuente), para tenerla como una fuente separada. Simplemente edite el carácter de espacio para tener un punto en el medio y guarde la fuente en ~ / .fonts. Ahora puede usarlo para su gvim o para todo el terminal … Copié el “!” personaje, eliminó la línea y movió el punto al centro. Tomó un poco más de 5 minutos …

    Nota: cambiar el carácter de espacio (0x20) resulta en la inconveniencia de tener puntos en toda la pantalla vim … (pero separará los espacios de las tabs …)

     :match CursorLine /\s\+/ 

    evita el bit “tienes que buscar espacios para que se muestren”, pero un defecto no se puede configurar para hacer cosas que no sean hilighting en los espacios. CursorLine puede ser cualquier grupo hilighting y en el tema predeterminado es un subrayado simple.

    Me gusta usar caracteres especiales para mostrar espacios en blanco, es más claro. Incluso un mapa para alternar es una característica clave, para una verificación rápida.

    Puede encontrar estas características en un script vim antiguo no actualizado desde 2004:

    vim-scripts/cream-showinvisibles@vim.org

    Gracias a project vim-scripts y vundle puedes volver a la vida con este plugin

    vim-scripts / cream-showinvisibles @ github

    Aún mejor, mis dos centavos en esto es agregar un atajo configurable (en lugar de F4 predefinido)

    así que agrega esto a ~ / .vimrc

     Plugin 'albfan/cream-invisibles' let g:creamInvisibleShortCut = "" "for my F4 goto next error 

    instalar el complemento en vim

     :PluginInstall 

    y ahí tienes

    Encontré agregar estos a mi .vimrc funcionó de manera más efectiva

     highlight ExtraWhitespace ctermbg=red guibg=red match ExtraWhitespace /\s\+$/ autocmd BufWinEnter * match ExtraWhitespace /\s\+$/ autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@ 

    Podrías usar

     :set list 

    realmente ver la estructura de una línea. Verá tabs y líneas nuevas explícitamente. Cuando ves un espacio en blanco, es realmente un espacio en blanco.

    resaltar búsqueda

     :set hlsearch 

    en .vimrc eso es

    y buscar tabs espaciales y devoluciones de carro

     / \|\t\|\r 

    o busca todos los caracteres de espacios en blanco

     /\s 

    de búsqueda de todos los caracteres de espacios en blanco (los caracteres en blanco no se muestran, por lo que puede ver los espacios en blanco entre las palabras, pero no los caracteres del espacio en blanco al final)

     /\S 

    para mostrar todos los caracteres de espacio en blanco al final – al final de la línea

     /\s$ 

    Para cubrir los caracteres de espacio en blanco Unicode:

     set list set listchars=tab:│\ ,nbsp:· highlight StrangeWhitespace guibg=Red ctermbg=Red " The list is from https://stackoverflow.com/a/37903645 (with `\t`, `\n`, ` `, `\xa0` removed): call matchadd('StrangeWhitespace', '[\x0b\x0c\r\x1c\x1d\x1e\x1f\x85\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]') 

    El resultado:

    • solo el espacio ordinal (U + 0020) se ve como un espacio (” “)
    • la pestaña (U + 0009) se ve como ” ” (dos caracteres: una tubería larga y luego un espacio ordinal; son grises en colorscheme murphy )
    • el espacio normal sin interrupción (U + 00A0) se ve como ” · ” (un carácter; es gris en colorscheme murphy )
    • cualquier otro personaje de espacio en blanco parece rojo ”
     :se list :se nolist 

    :se es suficiente :set no es necesario.

    también puede resaltar los espacios (reemplazando los espacios con un bloque):

     :%s/ /█/g 

    (antes de escribir deshacerlo)

    Agregar esto a mi .vimrc funciona para mí. Solo asegúrate de no tener nada más conflictivo …

     autocmd VimEnter * :syn match space /\s/ autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black 

    Guarde esos hacks en .vimrc como comentarios, entonces en el shell, simplemente:

     echo ' " how-to see the non-visible while spaces " :set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣ " set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:< " :set list " but hei how-to unset the visible tabs ?! " :set nolist ' >> ~/.vimrc