لا أستطيع إيجاد طريقة لجعل Vim تظهر كل المساحات البيضاء كحرف. كل ما وجدته كان حول علامات التبويب والمسافات الزائدة وما إلى ذلك.
كما قال آخرون ، يمكنك استخدام
:set list
التي سوف ، في تركيبة مع
:set listchars=...
عرض شخصيات غير مرئية.
الآن ، لا يوجد خيار صريح يمكنك استخدامه ل إظهار مسافة بيضاء ، ولكن في 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>
:set list
لتمكين.
:set nolist
لتعطيل.
اعتبارًا من patch 7.4.710 يمكنك الآن تعيين حرف لإظهاره بدلاً من المساحة باستخدام listchars!
:set listchars+=space:␣
لذلك ، لإظهارALLأحرف المسافة البيضاء كحرف يمكنك القيام بما يلي:
:set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
:set list
مناقشة حول القائمة البريدية: https://groups.google.com/forum/؟fromgroups#!topic/vim_dev/pjmW6wOZW_Q
أعتقد أن الإجابات الأخرى هنا أكثر شمولاً ، لكنني اعتقدت أنني أشارك خدعة أستخدمها عادةً للتمييز بين علامات التبويب والمسافات بصريًا:
:syntax on
:set syntax=whitespace
هذه هي قواعد تسليط الضوء على بناء الجملة تظهر لغة برمجة - علامات التبويب باللون الأخضر والمسافات باللون الأحمر. :)
يمكن دمجه مع :set list
كما ذكرته العديد من الإجابات الأخرى ، على الرغم من أن علامات التبويب ستظهر بعد ذلك كـ ^ I بدون مصباح أخضر ، لكن المسافات ستظهر باللون الأحمر.
:set list
سيعرض كل المسافات البيضاء كحرف. سيبدو كل شيء لكن مساحة مختلفة عن حالته الطبيعية ، مما يعني أنه إذا كنت لا تزال ترى مساحة قديمة بسيطة ، فهي في الحقيقة مساحة قديمة بسيطة. :)
إذا قمت بتعيين:
: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>
ملحوظة: حدد الوظيفة في vimrc بعد أن تم ضبط نظام الألوان.
اعتمادًا على قواعد بناء الجملة للمخزن المؤقت الحالي ، قد يعمل شيء من هذا القبيل:
:syn match WhiteSpace / / containedin=ALL conceal cchar=Æ
:setl conceallevel=2 concealcursor=nv
هذا يحتاج إلى vim 7.3 مع + ميزة إخفاء
تحديث 10/24/2014 لتوسيع قليلا على ذلك. من الممكن بالطبع تحديد بعض التظليل للأحرف المخفية.
يمكنك تكوين ، كيف تبدو الأحرف المخفية. للتمييز ، يجب عليك مرة واحدة على الأقل تكوين مجموعة التمييز "إخفاء" (راجع التعليمات في :h hl-Conceal
يمكن القيام بذلك في نظام الألوان الخاص بك ، ثم لن تحتاج إلى إعادة تكوينه مرة أخرى. لكن هذا يؤثر على جميع الأحرف المخفية (على سبيل المثال إذا يخفي البرنامج النصي الخاص بك بناء جملة بعض العناصر الأخرى ، سيتم عرضها كحرف فضاء بيضاء).
:hi Conceal ctermfg=7 ctermbg=NONE guifg=LightGrey guibg=NONE
يبدو أن هناك خصوصية لأن Vim لن يقوم بتمييز المسافات ، إذا كان البرنامج النصي الخاص بالجمل يستخدم الكلمة الأساسية skipwhite
. لن يكون هناك أي حل (ربما سيتم إصلاح هذا ، لقد نشرت patch )
list
. يبدو أن أحدث إصدار في وقت الكتابة هو { هذا واحد . (هذا يعني أنك تحتاج إلى إنشاء Vim الخاص بك لاستخدام هذا).conceallevel
و concealcursor
هي خيارات نافذة محلية. هذا يعني أنه يمكن أن يكونوا مختلفين في الإطارات المختلفة (وربما يتم تعيينهم أيضًا بواسطة ملحقات أنواع الملفات أو البرامج النصية الأخرى).BufWinEnter
or ربما أيضًا Syntax
أو حتى FileType
autocommand. (أنا لم تختبر أي واحد يعمل فعلا).يعني العنصران الأخيران أنه يتعين عليك إعداد بعض أوامر autocommands التي تعيد تعيين قواعد بناء الجملة وخيارات correesponding. لأول مرة ، قد يرغب المرء في إعداد التمييز باستخدام autocommand ColorScheme
(بحيث تبدو الأحرف المختفية دائمًا كما هي ، بغض النظر عن إعداد نظام الألوان فعليًا). للحصول على حل كامل ، انظر إلى إجابة romainl ، والتي يجب أن تمنحك بداية. إذا قمت بإعداد وظيفة ، فيمكنك بسهولة إعداد أمر تبديل للتبديل بين عرض ميزة التمييز أو إيقاف تشغيلها.
تحديث 10/26/2014 قمت بعمل plugin خارج هذا السؤال.
تحديث 04/22/2015 تم تضمين تصحيح في Vim يجعل هذا ممكنًا باستخدام الخيار list
. ببساطة اضبط set list listchars+=space:␣
هذا يعمل اعتبارًا من Vim 7.4.711
انا استعمل هذا
/\s
:set hlsearch
لتسليط الضوء على المساحات البيضاء. يبحث عن جميع المسافات البيضاء ، ثم يمكّن التمييز من جعلها تظهر. ومع ذلك ، فإنه لا طباعة شخصية خاصة.
إذا كنت تعني المسافة البيضاء "حرف" ، فإن اقتراحي سيكون مجرد بحث/استبدال. كما ألمح الآخرون ، تتغير set list
غير قابلة للطباعة أحرف إلى حرف مرئي تم تكوينه في listchars
.
لإظهار المسافات بشكل صريح كحرف آخر ، يجب أن تقوم الحيلة بشيء مماثل لما يلي:
:%s/ /█/g
ثم التراجع عن التغيير للعودة مرة أخرى.
(للحصول على █ ضغطت على تسلسل المفاتيح الدقيق هذا: :%s//CTRL-KFB/g)
لتسليط الضوء على المسافات ، ابحث عنها فقط:
/ <مساحة>
ملاحظات:
لتسليط الضوء على المسافات وعلامات التبويب:
/[<مساحة> <التبويب>]
هناك طريقة سريعة لإزالة النقاط البارزة وهي البحث عن أي شيء آخر:/asdf
(فقط اكتب أي قائمة قصيرة من الأحرف العشوائية)
يستند الرمز أدناه إلى إجابة كريستيان برابانت ويبدو أنه يفعل ما يريده البروتوكول الاختياري:
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
بعدة لغات يمنع ظهور النقطة الوسطى. لا أعرف (بعد؟) كيفية جعل هذا الحل أكثر موثوقية.
لقد شعرت بالإحباط من جميع الإجابات الأخرى على هذا السؤال ، لأن أيا منها لا يبرز شخصية الفضاء بطريقة مفيدة. إن عرض المسافات كأحرف من شأنه أن يساعد بشكل خاص للغات ذات تنسيق المسافات البيضاء ، حيث يكون خلط علامات التبويب والمسافات ضارًا.
الحل الخاص بي هو إظهار علامات التبويب وتسطير مسافات متعددة. يستعير من إجابة mrucci و هذا البرنامج التعليمي . لأنه يستخدم تسليط الضوء على بناء الجملة ، فهو ثابت:
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 / \+/
باستخدام هذا ، يتم عرض علامات التبويب كـ |
والمسافات كـ _
، مما يجعل من السهل للغاية معرفة متى أقوم بخلط أنماط الرموز.
الجانب السلبي الوحيد الذي وجدته هو أن هذا المقتطف لا يضبط لون الخلفية لمطابقة السياق (كما في التعليق).
جميع الإجابات الواردة أعلاه تحاول أن تجعل المساحات مرئية من الداخل. إذا كنت تصر حقًا على وجود مسافات مرئية كنقاط ، فهناك طريقة أخرى ...
إذا كان لا يمكن القيام به في vim ، قم بتغيير الخط بالكامل. قمت بنسخ الخط Ubuntu One Mono وتحريره باستخدام FontForge. تذكر تغيير اسم الخط بالكامل ، والعائلة ، والأسرة المفضلة ، والمتوافقة بالكامل (في FontFoge ، يوجد اسم TTF في معلومات الخط) ، حتى يكون كخط منفصل. ما عليك سوى تحرير حرف المسافة للحصول على نقطة في المنتصف وحفظ الخط على الخطوط ~ /. الآن يمكنك استخدامه لجهاز gvim أو الجهاز بأكمله ... لقد قمت بنسخ "!" حرف ، إزالة الخط ونقل النقطة إلى الوسط. استغرق الأمر أكثر من 5 دقائق بقليل ...
ملاحظة: يؤدي تغيير حرف المسافة (0x20) إلى إزعاج وجود نقاط على شاشة vim بأكملها ... (لكنه سيفصل المسافات عن علامات التبويب ...)
لم أجد بالضبط ما أردت من الإجابات الحالية. سوف الكود أدناه تسليط الضوء على جميع المساحات زائدة أحمر مشرق. ما عليك سوى إضافة ما يلي إلى .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()
لتغطية أحرف مسافة بيضاء لـ 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]')
النتيجة:
│
" (حرفين: توجيه طويل ثم مسافة ترتيبية ؛ تكون رمادية في colorscheme murphy
)·
" (حرف واحد ؛ إنها رمادية في colorscheme murphy
):match CursorLine /\s\+/
يتجنب "عليك البحث عن مسافات لحملهم على الظهور" ، لكن لا يمكن تكوين afaict للقيام بأشياء غير هجائية على المسافات. يمكن أن يكون CursorLine أي مجموعة hilighting وفي السمة الافتراضية يكون تسطير عادي.
أنا أحب استخدام أحرف خاصة لإظهار مسافة بيضاء ، هو أكثر وضوحا. حتى الخريطة للتبديل هي ميزة أساسية ، للتحقق السريع.
يمكنك العثور على هذه الميزات في برنامج نصي vim قديم لم يتم تحديثه منذ عام 2004:
vim-scripts/cream-showinvisibles@vim.org
بفضل المشروع vim-scripts و vundle يمكنك العودة إلى هذا البرنامج المساعد في الحياة
همة-مخطوطات/كريم showinvisibles @ جيثب
أفضل ، بلدي اثنين سنتا على هذا هو إضافة اختصار شكلي (بدلا من المعرفة مسبقا F4)
أضف هذا إلى ~/.vimrc
Plugin 'albfan/cream-invisibles'
let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error
تثبيت البرنامج المساعد على vim
:PluginInstall
وهناك تذهب
يمكنك استخدام
:set list
لنرى حقا هيكل الخط. سترى علامات التبويب والخطوط الجديدة بشكل صريح. عندما ترى فارغة ، إنها فارغة حقًا.
تسليط الضوء على البحث
:set hlsearch
في .vimrc
هذا هو
والبحث عن علامات التبويب الفضاء وعودة النقل
/ \|\t\|\r
أو ابحث عن كل حروف مسافة بيضاء
/\s
البحث عن جميع أحرف المسافة غير البيضاء (لا يتم عرض أحرف مسافة بيضاء ، لذلك ترى أحرف مسافة بيضاء بين الكلمات ، ولكن ليس أحرف مسافة بيضاء زائدة)
/\S
لإظهار جميع أحرف المسافة البيضاء الزائدة - في نهاية السطر
/\s$
احتفظ تلك الاختراقات في .vimrc كتعليقات ، لذلك في Shell ، ببساطة:
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
يمكنك أيضًا تمييز المسافات (استبدال المسافات بكتلة):
:%s/ /█/g
(قبل الكتابة التراجع عن ذلك)
:se list
:se nolist
:se
يكفي ، :set
غير مطلوب.
إضافة هذا إلى بلدي. vimrc يعمل بالنسبة لي. فقط تأكد من عدم وجود أي شيء آخر متعارض ..
autocmd VimEnter * :syn match space /\s/
autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black