Je ne trouve pas le moyen de faire en sorte que Vim affiche tous les espaces blancs en tant que personnage. Tout ce que j'ai trouvé concernait des tabulations, des espaces de fuite, etc.
Comme d’autres l’ont dit, vous pourriez utiliser
:set list
qui, en combinaison avec
:set listchars=...
afficher des caractères invisibles.
Maintenant, il n’existe pas d’option explicite que vous pouvez utiliser pour afficher des espaces , mais vous pouvez définir un caractère dans listchars. montrer pour tout MAIS les espaces. Par exemple, le mien ressemble à ceci
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
alors, maintenant, après avoir utilisé
:set list
tout ce qui n'est pas explicitement montré comme quelque chose d'autre est alors, en réalité, un vieil espace blanc.
Comme d’habitude, utilisez l’aide pour comprendre le fonctionnement de listchars
. Il fournit d'excellentes informations sur les caractères qui peuvent être affichés (comme l'espace de fin, par exemple) et comment le faire:
:help listchars
Il peut être utile d’ajouter une bascule pour que vous puissiez voir facilement les modifications en cours d’édition (source: VIM: définir la liste! En tant que bascule dans .vimrc ):
noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>
:set list
pour l'activer.
:set nolist
à désactiver.
À partir du patch 7.4.71 vous pouvez maintenant définir un caractère à afficher à la place de l'espace à l'aide de listchars!
:set listchars+=space:␣
Ainsi, pour afficher TOUS caractères d'espaces en tant que caractère, vous pouvez effectuer les opérations suivantes:
:set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
:set list
Discussion sur la liste de diffusion: https://groups.google.com/forum/?fromgroups#!topic/vim_dev/pjmW6wOZW_Q
Je pense que les autres réponses ici sont plus complètes, mais je pensais partager une astuce que j'utilise habituellement pour différencier visuellement les tabulations et les espaces:
:syntax on
:set syntax=whitespace
Ce sont des règles de mise en évidence de la syntaxe pour les onglets langage de programmation Whitespace - apparaissent en vert et les espaces en rouge. :)
Peut être combiné avec :set list
comme mentionné par de nombreuses autres réponses, bien que les onglets apparaîtront alors comme ^ I sans voyant vert, mais les espaces apparaîtront en rouge.
:set list
affichera tous les espaces comme un caractère. Tout mais un espace sera différent de son état normal, ce qui signifie que si vous voyez toujours un ancien espace vide, il s'agit vraiment d'un ancien espace vide. :)
Si vous définissez:
:highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none
puis effectuez une recherche d’espace, chaque caractère de l’espace apparaît en tant que caractère souligné.
Vous pouvez utiliser cette commande dans une fonction pratique qui bascule le "soulignement" des espaces.
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
Mappez la fonction sur une touche de raccourci avec:
nmap <silent> <F3> <Esc>:call ToggleSpaceUnderscoring()<CR>
NB: Définissez la fonction dans vimrc après avoir défini le schéma de couleurs.
En fonction de vos règles de syntaxe pour le tampon actuel, ceci pourrait fonctionner:
:syn match WhiteSpace / / containedin=ALL conceal cchar=Æ
:setl conceallevel=2 concealcursor=nv
Cela nécessite un vim 7.3 avec + caché
Mise à jour du 10/24/2014 Pour en dire un peu plus. Il est bien sûr possible de définir une surbrillance pour les personnages encollés.
Vous pouvez configurer l'apparence des caractères cachés. Pour mettre en surbrillance, vous devez au moins une fois configurer le groupe de surbrillance 'Dissimulation' (voir l'aide à la section :h hl-Conceal
). Cette opération peut être effectuée dans votre schéma de couleurs et vous n'avez pas besoin de la reconfigurer à nouveau. caractères (par exemple, si votre script de syntaxe cache quelques éléments supplémentaires, ils seront affichés sous forme de caractères d'espaces blancs). Cela pourrait ressembler à ceci:
:hi Conceal ctermfg=7 ctermbg=NONE guifg=LightGrey guibg=NONE
Il semble y avoir une particularité que Vim ne mettra pas les espaces en évidence si le script de syntaxe utilise le mot-clé skipwhite
. Il n'y aura pas d'autre solution (peut-être que cela sera corrigé, j'ai posté un patch )
list
. Le dernier en date semble être celui-ci . (Cela signifie que vous devez créer votre propre Vim pour l'utiliser).conceallevel
et concealcursor
sont des options locales de la fenêtre. Cela signifie qu'ils peuvent être différents dans différentes fenêtres (et seront éventuellement définis par des plugins de type fichier ou d'autres scripts de plugin).BufWinEnter
ou éventuellement aussi une autocommande Syntax
ou même FileType
. (Je n'ai pas testé lequel fonctionne réellement).Les deux derniers éléments signifient que vous devez configurer des autocommandes qui réinitialisent les règles de syntaxe et les options correspondantes. Pour le premier, on peut vouloir configurer la surbrillance en utilisant une auto-commande ColorScheme
(pour que les caractères masqués aient toujours le même aspect, indépendamment de ce que le jeu de couleurs définit réellement). Pour une solution complète, examinez la réponse romainl, cela devrait vous donner un bon départ. Si vous configurez une fonction, vous pouvez facilement configurer une commande à bascule pour activer ou désactiver l’affichage de la surbrillance spéciale.
Mise à jour du 26/10/2014 J'ai créé un plugin à partir de cette question.
Mise à jour du 22/04/2015 Un correctif intégré à Vim rend cela possible grâce à l'option list
. Il suffit de définir set list listchars+=space:␣
Ceci fonctionne à partir de Vim 7.4.711
Je l'utilise
/\s
:set hlsearch
mettre en évidence les espaces blancs. Il recherche tous les espaces blancs, puis active la surbrillance pour les faire apparaître. Cependant, not affiche un caractère spécial.
Si par blanc vous entendez le caractère '', ma suggestion serait simplement une recherche/remplacement. Comme les autres l'ont laissé entendre, set list
change non imprimant caractères en un caractère visible configuré dans listchars
.
Pour montrer explicitement les espaces comme un autre personnage, un truc similaire à celui ci-dessous devrait faire l'affaire:
:%s/ /█/g
Ensuite, annulez simplement le changement pour revenir en arrière.
(pour obtenir le █ j'ai appuyé sur cette séquence de touches exacte: :%s//CTRL-KFB/g)
Pour mettre en évidence des espaces, il suffit de le rechercher:
/ <espace>
Remarques:
Pour mettre en évidence des espaces et des onglets:
/[<espace> <tab>]
Un moyen rapide de supprimer les points forts est de rechercher autre chose:/asdf
(tapez simplement une liste de caractères aléatoires)
Le code ci-dessous est basé sur la réponse de Christian Brabandt et semble faire ce que veut le PO:
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
Ajoutez ces lignes à votre ~/.vimrc
et démarrez une nouvelle session Vim pour voir la magie toujours imparfaite se produire.
N'hésitez pas à éditer les couleurs par défaut et à masquer les caractères.
Mises en garde: quelque chose dans le groupe de syntaxe *FuncBody
dans plusieurs langues empêche l'affichage du point du milieu. Je ne sais pas (encore?) Comment rendre cette solution plus fiable.
Toutes les autres réponses à cette question m'ont frustré, car aucune d'elles ne met en valeur le caractère d'espace de manière utile. L'affichage d'espaces en tant que caractères serait particulièrement utile pour les langages au format espace blanc, où le mélange d'onglets et d'espaces est préjudiciable.
Ma solution consiste à afficher des onglets et à souligner plusieurs espaces. Il emprunte à réponse de mrucci et ce tutoriel . Parce qu'il utilise la coloration syntaxique, il est persistant:
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 / \+/
Grâce à cela, les onglets sont affichés sous la forme |
et les espaces sous la forme _
, ce qui permet de distinguer très facilement les styles de code.
Le seul inconvénient que j'ai constaté est que cet extrait ne modifie pas la couleur d'arrière-plan en fonction du contexte (comme dans un commentaire).
toutes les réponses ci-dessus tentent de rendre les espaces visibles depuis vim. Si vous insistez vraiment pour avoir des espaces visibles sous forme de points, il existe une autre approche ...
Si cela ne peut pas être fait dans vim, changez entièrement votre police. J'ai copié la police Ubuntu One Mono et l'ai modifiée à l'aide de FontForge. N'oubliez pas de changer le nom complet de la police, la famille, la famille préférée, la compatibilité complète (dans FontFoge, c'est sous Noms TTF dans les informations sur la police), afin de l'avoir comme police distincte. Modifiez simplement le caractère espace pour qu'il ait un point au milieu et enregistrez la police dans ~/.fonts. Vous pouvez maintenant l’utiliser pour votre gvim ou l’ensemble du terminal ... J'ai copié le "!" caractère, enlevé la ligne et déplacé le point au milieu. Cela a pris un peu plus de 5 minutes ...
Remarque: changer le caractère d'espace (0x20) entraîne l'inconvénient d'avoir des points sur tout l'écran de vim ... (mais cela séparera les espaces des onglets ...)
Je n'ai pas trouvé exactement ce que je voulais parmi les réponses existantes. Le code ci-dessous mettra en surbrillance tous les espaces de fin rouge vif. Ajoutez simplement ce qui suit à votre .vimrc
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()
Pour couvrir les caractères d'espacement 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]')
Le résultat:
│
" (deux caractères: un long tuyau puis un espace ordinal; ils sont gris dans colorscheme murphy
)·
" (un caractère; il est gris en colorscheme murphy
):match CursorLine /\s\+/
évite le bit "vous devez rechercher des espaces pour les faire apparaître" mais un afaict ne peut pas être configuré pour faire des choses non-hilighting aux espaces. CursorLine peut être n'importe quel groupe hiérarchique et, dans le thème par défaut, il est simplement souligné.
J'aime utiliser des caractères spéciaux pour afficher les espaces, c'est plus clair. Même une carte à basculer est une fonctionnalité clé, pour une vérification rapide.
Vous pouvez trouver ces fonctionnalités dans un ancien script vim non mis à jour depuis 2004:
Merci à project vim-scripts et vundle vous pouvez revenir à la vie ce plugin
vim-scripts/cream-showinvisibles @ github
Mieux encore, mon avantage est d’ajouter un raccourci configurable (au lieu de prédéfini). F4)
alors ajoutez ceci à ~/.vimrc
Plugin 'albfan/cream-invisibles'
let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error
installer le plugin sur vim
:PluginInstall
et voilà
Vous pourriez utiliser
:set list
pour vraiment voir la structure d'une ligne. Vous verrez explicitement les onglets et les nouvelles lignes. Lorsque vous voyez un blanc, c'est vraiment un blanc.
mettre en évidence la recherche
:set hlsearch
dans .vimrc
c'est-à-dire
et rechercher des tabulations d'espace et des retours chariot
/ \|\t\|\r
ou recherchez tous les caractères d'espaces
/\s
de recherche de tous les caractères d’espace non blanc (les caractères d’espace ne sont pas affichés, vous voyez donc les espaces entre les mots, mais pas les derniers caractères)
/\S
pour afficher tous les espaces finaux - à la fin de la ligne
/\s$
Conservez ces hacks dans le fichier .vimrc sous forme de commentaires, donc dans le shell, simplement:
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
vous pouvez également mettre en évidence les espaces (en remplaçant les espaces par un bloc):
:%s/ /█/g
(avant d'écrire, annulez-le)
:se list
:se nolist
:se
suffit, :set
n'est pas nécessaire.
Ajouter ceci à mon fichier .vimrc fonctionne pour moi. Assurez-vous juste que vous n'avez rien d'autre en conflit ..
autocmd VimEnter * :syn match space /\s/
autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black