Сделать Vim показать ВСЕ пробелы как символ

Я не могу найти способ заставить Vim показать все пробелы как символ. Все, что я нашел, это о вкладках, конечных пробелах и т.д.

Ответ 1

Как уже говорили другие, вы могли бы использовать

:set list

который в сочетании с

:set listchars=...

отображать невидимые символы.
Теперь нет явной опции, которую вы можете использовать для отображения пробелов, но в списках символов вы можете настроить отображение символа для всего, НО пробелы. Например, мой выглядит так

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

так что теперь, после того, как вы используете

:set list

все, что явно не показано как что-то еще, на самом деле является простым старым пробелом.

Как обычно, чтобы понять, как работает listchars, воспользуйтесь помощью. Он предоставляет отличную информацию о том, какие символы могут отображаться (например, конечный пробел) и как это сделать:

:help listchars

Возможно, было бы полезно добавить к нему переключатель, чтобы вы могли легко увидеть изменения в середине редактирования (источник: VIM: set list! Как переключатель в .vimrc):

noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>

Ответ 2

:set list для включения.

:set nolist для отключения.

Ответ 3

В патче 7.4.710 теперь вы можете установить символ, который будет отображаться вместо пространства, используя listchars!

:set listchars+=space:␣

Итак, чтобы показать ВСЕ символы пробела в качестве символа, вы можете сделать следующее:

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

Обсуждение списка рассылки: https://groups.google.com/forum/?fromgroups#!topic/vim_dev/pjmW6wOZW_Q

Ответ 4

Я думаю, что другие ответы здесь более полные, но я думал, что разделю трюк, который я обычно использую, чтобы визуально различать вкладки и пробелы:

:syntax on
:set syntax=whitespace

Это правила подсветки синтаксиса для языка программирования Whitespace - вкладки отображаются зеленым и красным.:)

Может быть объединен с :set list, как упоминалось многими другими ответами, хотя вкладки будут отображаться как ^ я без зеленого максимума, но пробелы будут отображаться красным цветом.

Ответ 5

:set list покажет все пробелы как символ. Все, кроме пространства, будет выглядеть иначе, чем его нормальное состояние, а это означает, что если вы все еще видите простое старое пространство, это действительно простое старое пространство.:)

Ответ 6

Если вы установили:

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

а затем выполните поиск пробела, каждый символ пробела будет показан как символ подчеркивания.

Вы можете использовать эту команду в удобной функции, которая переключает "подчеркивание" пробелов.

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

Сопоставьте функцию с сочетанием клавиш:

nmap <silent> <F3> <Esc>:call ToggleSpaceUnderscoring()<CR>

NB: Определите функцию в vimrc после того, как была установлена ​​цветовая схема.

Ответ 7

В зависимости от ваших синтаксических правил для текущего буфера может работать что-то вроде этого:

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

Для этого требуется vim 7.3 с функцией скрытия

Обновление 10/24/2014 Чтобы немного расширить это. Конечно, можно определить некоторую подсветку для конусных символов.

  • Вы можете настроить, как выглядят скрытые символы. Для подсветки вам нужно как минимум раз настроить группу подсветки "Скрывать" (см. Справку в :h hl-Conceal Это можно сделать в вашей цветовой схеме, а затем вам не нужно снова перенастраивать ее, но это влияет на все скрытые символы ( например, если ваш синтаксис script скрывает еще несколько элементов, они будут отображаться в виде ваших пробелов). Это может выглядеть так:

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

  • Кажется, что особенность Vim не выделяет пробелы, если синтаксис script использует ключевое слово skipwhite. Не будет никакого пути (возможно, это будет исправлено, я отправил патч)

  • Кажется, что патч плавает вокруг, что позволит настроить, как пробелы будут выглядеть в режиме list. Последний, на момент написания, кажется этот. (Это означает, что вам нужно создать собственный Vim, чтобы использовать это).
  • conceallevel и concealcursor являются локальными параметрами окна. Это означает, что они могут быть разными в разных окнах (и, возможно, также будут установлены плагинами типов файлов или другими скриптами плагинов).
  • Группы подсветки синтаксиса должны выполняться всякий раз, когда файл определения синтаксиса перезагружается. Это можно сделать, используя автокоманду BufWinEnter или, возможно, также Syntax или даже FileType. (Я не тестировал, какой из них действительно работает).

Последние два пункта означают, что вам нужно будет установить некоторые автокоманды, которые reset правила синтаксиса и соответствующие параметры. Для первого можно запрограммировать выделение с помощью автокоманды ColorScheme (так, чтобы скрытые символы всегда выглядели одинаково, независимо от того, что действительно устанавливает цветовая схема). Для полного решения посмотрите на romainl-ответ, который должен дать вам начало. Если вы настраиваете функцию, вы можете легко настроить команду переключения, чтобы включить или отключить специальную подсветку.

Обновление 10/26/2014 Я сделал плагин из этого вопроса.

Обновление 04/22/2015 Патч включен в Vim, что делает возможным использование опции list. Просто установите set list listchars+=space:␣ Это работает как Vim 7.4.711

Ответ 8

Я использую этот

/\s
:set hlsearch

чтобы выделить пробелы. Он ищет все пробелы, а затем позволяет выделить подсветку. Однако он не печатает специальный символ.

Ответ 9

Если по пробелам вы имеете в виду символ '', мое предложение будет просто поиском/заменой. Как намекают другие, set list изменяет непечатаемые символы на видимый символ, настроенный в listchars.

Чтобы явно показывать пробелы как какой-то другой символ, что-то похожее на нижеследующее должно сделать трюк:

:%s/ /█/g

Затем просто отмените изменение, чтобы вернуться назад.

(чтобы получить █, я нажал эту точную последовательность клавиш: : % s / / CTRL-K F B / g)

Ответ 10

Чтобы выделить пробелы, просто выполните поиск:

/< пространство >

Примечания:

< пространство > означает просто введите символ пробела. Включить выделение результатов поиска с помощью: set hlsearch

Чтобы выделить пробелы и вкладки:

/[& Л; пространство > < & вкладка GT;]

Быстрый способ удалить основные моменты - это найти что-нибудь еще: /ASDF

(просто введите короткий список случайных символов)

Ответ 11

Код ниже основан на ответе Кристиана Брабанда и, похоже, делает то, что хочет 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

Добавьте эти строки в свой ~/.vimrc и запустите новую сессию Vim, чтобы увидеть, что все еще несовершенная магия произойдет.

Не стесняйтесь редактировать цвета по умолчанию и скрывать символ.


Предостережение: что-то в группе синтаксиса *FuncBody на нескольких языках предотвращает показ средней точки. Я не знаю (пока?), Как сделать это решение более надежным.

Ответ 12

Меня расстроили все остальные ответы на этот вопрос, потому что ни один из них не выделяет космический персонаж полезным способом. Отображение пробелов в качестве символов будет особенно полезно для языков с форматированием в виде пробелов, где смешение вкладок и пробелов является вредным.

Мое решение - показать вкладки и подчеркнуть несколько пробелов. Он берет mrucci answer и этот учебник. Поскольку он использует подсветку синтаксиса, он устойчив:

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 /  \+/

Используя это, вкладки отображаются как | и пробелы как _, что очень удобно, когда я смешиваю стили кода.

Единственный недостаток, который я обнаружил, заключается в том, что этот фрагмент не корректирует цвет фона для соответствия контексту (например, в комментарии).

Ответ 13

все приведенные выше ответы попытаются сделать видимыми пространства внутри vim. Если вы действительно настаиваете на наличии видимых пространств в виде точек, есть другой подход...

Если это невозможно сделать в vim, полностью измените шрифт. Я скопировал шрифт Ubuntu One Mono и отредактировал его с помощью FontForge. Не забудьте изменить шрифт fullname, family, preferred family, compatible full (в FontFoge под именами TTF в информации о шрифте), чтобы иметь его как отдельный шрифт. Просто отредактируйте символ пробела, чтобы точка была посередине, и сохраните шрифт в ~/.fonts Теперь вы можете использовать его для своего gvim или всего терминала... Я скопировал "!" символ, удалил линию и переместил точку в середину. Это заняло чуть больше 5 минут...

Примечание: изменение символа пробела (0x20) приводит к неудобству наличия точек на всем экране vim... (но это будет отделять пробелы от вкладок...)

Ответ 14

Я не нашел точно, что я хотел от существующих ответов. Код ниже выделит все пробелы ярко-красным. Просто добавьте следующее в ваш .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()

Ответ 15

:match CursorLine /\s\+/

избегает "вы должны искать пробелы, чтобы их отобразить", но афайк не может быть настроен для того, чтобы делать непрозрачные вещи в пространствах. CursorLine может быть любой группой hilighting, а в теме по умолчанию это простая подчеркивание.

Ответ 16

Мне нравится использовать специальные символы для отображения пробелов, более понятно. Даже карта для переключения - ключевая функция для быстрой проверки.

Вы можете найти эти функции в старом vim script, который не обновляется с 2004 года:

vim-scripts/[email protected]

Благодаря проекту vim-scripts и vundle вы можете вернуться к этому плагину

vim-scripts/cream-showinvisibles @github

Еще лучше, мои два цента на этом - добавить настраиваемый ярлык (вместо предопределенного F4)

поэтому добавьте это в ~/.vimrc

Plugin 'albfan/cream-invisibles'

let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error

установить плагин на vim

:PluginInstall

и там вы идете

Ответ 17

Чтобы покрыть пробельные символы Юникода:

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]')

Результат:

  • только ординальное пространство (U + 0020) выглядит как пробел (" ")
  • вкладка (U + 0009) выглядит как " " (два символа: длинная труба и затем порядковый пробел; они серого цвета в colorscheme murphy)
  • нормальный неразрывный пробел (U + 00A0) выглядит как " · " (один символ; он серый в colorscheme murphy)
  • любой другой символ пробела выглядит красным "

Ответ 18

Вы можете использовать

:set list

чтобы действительно увидеть структуру строки. Вы увидите явно вкладки и новые строки. Когда вы видите пустое, это действительно пустое.

Ответ 19

выделить поиск

:set hlsearch 

в .vimrc, что

и поиск пробелов и возврат каретки

/ \|\t\|\r

или найдите все пробельные символы

/\s

для поиска всех символов небелого пробела (пробельные символы не отображаются, поэтому вы видите пробельные символы между словами, но не конечные пробельные символы)

/\s

чтобы показать все символы пробела пробела - в конце строки

/\s$

Ответ 20

Сохраните эти хаки в .vimrc как комментарии, так что в оболочке просто:

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

Ответ 21

:se list
:se nolist

:se достаточно, :set не требуется.

Ответ 22

вы также можете выделить пробелы (заменяя пробелы блоком):

:%s/ /█/g

(перед записью отменить его)

Ответ 23

Добавление этого в мой .vimrc работает для меня. Просто убедитесь, что у вас нет другого конфликта.

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