texto - vim pdf
Haz que Vim muestre TODOS los espacios en blanco como un personaje (23)
No puedo encontrar una manera de hacer que Vim muestre todos los espacios en blanco como un personaje. Todo lo que encontré fue sobre pestañas, espacios finales, etc.
¡A partir del parche 7.4.710 ahora puede configurar un carácter para mostrar en lugar de espacio utilizando listchars!
:set listchars+=space:␣
Por lo tanto, 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
Agregar esto a mi .vimrc funciona para mí. Solo asegúrate de que no tengas nada más conflictivo ..
autocmd VimEnter * :syn match space //s/
autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black
Como otros han dicho, podrías usar
:set list
que será, en combinación con
:set listchars=...
Mostrar caracteres invisibles.
Ahora, no hay una opción explícita que puedas usar para mostrar espacios en blanco, pero en listchars, podrías establecer un carácter para mostrar todo, PERO espacios en blanco. Por ejemplo, la mía se ve así.
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
así que, ahora, después de usar
:set list
todo lo que no se muestra explícitamente como otra cosa, es entonces, en realidad, un espacio en blanco simple y antiguo.
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 al final, por ejemplo) y cómo hacerlo:
:help listchars
Puede ser útil agregarle un conmutador para que pueda ver los cambios a mitad de la edición fácilmente (fuente: VIM: set list! Como alternador en .vimrc ):
noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>
Creo que otras respuestas aquí son más completas, pero pensé que compartiría un truco que suelo usar para diferenciar visualmente las pestañas y los espacios:
:syntax on
:set syntax=whitespace
Estas son reglas de resaltado de sintaxis para el lenguaje de programación de espacios en blanco: las pestañas se muestran en verde y los espacios en rojo. :)
Se puede combinar con :set list
como se menciona en muchas otras respuestas, aunque las pestañas se mostrarán como ^ I sin un resaltado verde, pero los espacios se mostrarán en rojo.
Dependiendo de las reglas de sintaxis 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 un vim 7.3 con + función de ocultación
Actualización 10/24/2014 Para ampliar un poco en eso. Por supuesto, es posible definir algunos resaltados para los caracteres ocultos.
Puedes configurar cómo se ven los caracteres ocultos. Para resaltar, tendría que 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 volver a configurarlo. Pero esto afecta a todos los elementos ocultos caracteres (por ejemplo, si su script de sintaxis oculta algunos elementos más, se mostrarán como sus caracteres de espacio 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 sintaxis usa la palabra clave
skipwhite
. No habrá manera de evitarlo (quizás esto se solucione, publiqué un patch )- Parece que hay un parche flotando alrededor, que permitirá personalizar cómo se verán los espacios en el modo de
list
. El último en el momento de la escritura parece ser este . (Esto significa que necesitas construir tu propio Vim para usar esto). - El
conceallevel
y elconcealcursor
son opciones locales de ventana. Eso significa que pueden ser diferentes en diferentes ventanas (y posiblemente también serán configurados por complementos de tipo de archivo u otros scripts de complementos). - Los grupos de resaltado de sintaxis deben ejecutarse siempre que se vuelva a cargar un archivo de definición de sintaxis. Esto se podría hacer usando un
BufWinEnter
o posiblemente también unaSyntax
o incluso autocommandFileType
. (No he probado cuál funciona realmente).
Los últimos dos elementos significan que debería configurar algunos autocomandos que restablecen las reglas de sintaxis y las opciones correspondientes. Para la primera, uno podría querer configurar el resaltado usando una función de ColorScheme
(para que los caracteres ocultos se vean siempre iguales, independientemente de lo que realmente establece un esquema de color). Para una solución completa, busque en la respuesta de romainl, que debería darle un comienzo. Si configura una función, puede configurar fácilmente un comando de alternancia para activar o desactivar el resaltado especial.
Actualización 10/26/2014 Hice un plugin de esta pregunta.
Actualización 22/04/2015 Se ha incluido un parche en Vim que hace esto posible mediante la opción de list
. Simplemente configure set list listchars+=space:␣
Esto funciona a partir de Vim 7.4.711
El siguiente código se basa en la respuesta de Christian Brabandt y parece hacer lo que quiere el OP:
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
e inicie una nueva sesión de Vim para ver cómo ocurre la magia imperfecta .
Siéntase libre de editar los colores predeterminados y ocultar el carácter.
Advertencia: algo en el *FuncBody
grupo de sintaxis de *FuncBody
en varios idiomas evita que se muestre el punto medio. No sé (¿todavía?) Cómo hacer que esa solución sea más confiable.
Encontré que agregar estos .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/+/%#/@<!$/
autocmd InsertLeave * match ExtraWhitespace //s/+$/
autocmd BufWinLeave * call clearmatches()
Mantén esos hacks en el .vimrc como comentarios, así que 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
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 comprobación rápida.
Puede encontrar estas características en un antiguo script vim no actualizado desde 2004:
Gracias al proyecto vim-scripts y vundle , puede volver a la vida con este complemento.
vim-scripts/cream-showinvisibles@github
Aún mejor, mis dos centavos en esto es agregar un atajo configurable (en lugar de F4 predefinido)
entonces agrega esto a ~ / .vimrc
Plugin ''albfan/cream-invisibles''
let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error
instalar el plugin en vim
:PluginInstall
y ahí tienes
Me sentí frustrado con todas las otras respuestas a esta pregunta, porque ninguna de ellas resalta el carácter de espacio de una manera útil. Mostrar espacios como caracteres sería particularmente útil para los idiomas con formato de espacio en blanco, donde la combinación de tabulaciones y espacios es perjudicial.
Mi solución es mostrar pestañas y subrayar múltiples espacios. Toma prestado de la respuesta de mrucci y este tutorial . Debido a que utiliza resaltado de sintaxis, 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 / /+/
Usando esto, las pestañas 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).
Para cubrir los caracteres de espacio en blanco de Unicode:
set list
set listchars=tab:│/ ,nbsp:·
highlight StrangeWhitespace guibg=Red ctermbg=Red
" The list is from https://.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 canalización larga y luego un espacio ordinal; son grises en elcolorscheme murphy
decolorscheme murphy
) - el espacio normal sin roturas (U + 00A0) se ve como "
·
" (un carácter; es gris en elcolorscheme murphy
decolorscheme murphy
) - cualquier otro carácter de espacio en blanco se ve como rojo "
"
Para resaltar espacios, solo busca:
/ <space>
Notas:
Para resaltar espacios y pestañas:
/ [<space> <tab>]
Una forma rápida de eliminar los elementos destacados es buscar cualquier otra cosa: / asdf
(solo escribe cualquier lista corta de caracteres aleatorios)
Si establece:
: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 práctica 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
Asigne la función a una tecla de acceso directo con:
nmap <silent> <F3> <Esc>:call ToggleSpaceUnderscoring()<CR>
NB: Defina la función en vimrc después de que se haya establecido el esquema de colores.
Si por espacios en blanco te refieres al carácter '''', mi sugerencia sería simplemente una búsqueda / reemplazo. Como han sugerido los demás, set list
cambia los caracteres que no se imprimen a un carácter visible que está configurado en listchars
de 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 volver atrás.
(para obtener el █ presioné esta secuencia de teclas exacta :: % s / / CTRL-K F B / g )
También puede resaltar los espacios (reemplazando los espacios con un bloque):
:%s/ /█/g
(antes de escribirlo deshacerlo)
Todas las respuestas anteriores intentan hacer espacios visibles desde 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 los 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 todo el terminal ... Copié el "!" Carácter, quitó la línea y movió el punto al medio. Tomó un poco más de 5 minutos ...
Nota: cambiar el carácter de espacio (0x20) provoca la inconveniencia de tener puntos en toda la pantalla vim ... (pero separará los espacios de las pestañas ...)
Usted podría usar
:set list
Ver realmente la estructura de una línea. Verás pestañas y nuevas líneas explícitamente. Cuando ves un espacio en blanco, es realmente un espacio en blanco.
resaltar búsqueda
:set hlsearch
en .vimrc
que es
y buscar las pestañas de espacio y retornos de carro
/ /|/t/|/r
o busca todos los caracteres de espacio en blanco
//s
de búsqueda para todos los caracteres que no sean espacios en blanco (los caracteres de espacio en blanco no se muestran, por lo que se ven los caracteres de espacio en blanco entre las palabras, pero no los caracteres de espacio en blanco)
//S
para mostrar todos los caracteres del espacio en blanco al final - al final de la línea
//s$
yo uso esto
//s
:set hlsearch
Para resaltar espacios en blanco. Busca todos los espacios en blanco, y luego habilita el resaltado para hacerlos resaltar. Sin embargo, no imprime un carácter especial.
:set list
mostrará todos los espacios en blanco como un carácter. Todo menos un espacio tendrá un aspecto diferente al de su estado normal, lo que significa que si aún ve un espacio antiguo normal, en realidad es un espacio antiguo normal. :)
:set list
para habilitar.
:set nolist
para deshabilitar.
:match CursorLine //s/+/
evita el bit "tienes que buscar espacios para que aparezcan", pero afaict no se puede configurar para hacer cosas que no encajen en los espacios. CursorLine puede ser cualquier grupo de hilighting y en el tema predeterminado es un subrayado simple.
:se list
:se nolist
:se
es suficiente :set
no es necesario.