Jadikan Vim menunjukkan SEMUA ruang putih sebagai karakter

772

Saya tidak dapat menemukan cara untuk membuat Vim menampilkan semua spasi putih sebagai karakter. Yang saya temukan adalah tentang tab, spasi tambahan, dll.

mtk
sumber
14
Saya juga berusaha menyelesaikan masalah ini dengan tepat. Tolong, jika Anda menemukan ini, jangan membuat tanggapan lain yang melibatkan :set list. Itu tidak menjawab pertanyaan kami. (Kepada pendatang lain: respons mrucci di bawah ini membantu, meskipun bukan solusi yang nyata .)
ELLIOTTCABLE
1
Untuk semua orang yang mengatakan bahwa spasi terlihat dengan listdan listcharsmenganggap bahwa spasi langsung mengikuti tab. Akan hampir tidak terlihat dalam situasi ini. Saya setuju bahwa Anda dapat menangkap sebagian besar situasi, tetapi jika akan lebih baik memiliki sorotan yang tepat dari semua ruang.
Kevin Cox
11
Untuk pengunjung baru: Ini diselesaikan dalam versi vim yang lebih baru! Lihat jawaban brettanomyces di bawah ini .
DAPAT DITERIMA
1
Terkait (tetapi tumpukan perbedaan): vi.stackexchange.com/questions/422/…
Pureferret

Jawaban:

693

Seperti yang orang lain katakan, Anda bisa menggunakannya

:set list

yang akan, dikombinasikan dengan

:set listchars=...

tampilkan karakter yang tidak terlihat.
Sekarang, tidak ada opsi eksplisit yang dapat Anda gunakan untuk menampilkan spasi putih, tetapi dalam listchars, Anda dapat mengatur karakter untuk ditampilkan untuk semua tapi spasi putih. Sebagai contoh, milik saya terlihat seperti ini

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

jadi, sekarang, setelah kamu gunakan

:set list

segala sesuatu yang tidak secara eksplisit ditampilkan sebagai sesuatu yang lain, kemudian, benar-benar, spasi putih tua.

Seperti biasa, untuk memahami cara listcharskerjanya, gunakan bantuan. Ini memberikan informasi hebat tentang karakter apa yang dapat ditampilkan (seperti ruang tambahan, misalnya) dan bagaimana melakukannya:

:help listchars

Mungkin bermanfaat untuk menambahkan toggle sehingga Anda dapat melihat perubahan sedang mengedit dengan mudah (sumber: VIM: set list! Sebagai toggle di .vimrc ):

noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>
Benteng
sumber
4
“Segala sesuatu yang tidak secara eksplisit ditampilkan sebagai sesuatu yang lain”? Cobalah ruang unicode dari rentang U + 2000..U + 200A. Jika font dengan lebar tetap mendukungnya, mereka akan ditampilkan seperti ruang 0x20 normal.
ZyX
2
@ZyX - Saya tidak mengambil seluruh Unicode, tetapi set karakter yang agak umum digunakan. Jika Anda tidak puas dengan jawabannya, jangan ragu untuk menyarankan peningkatan.
Benteng
20
@ckarbass -: set invlist
Rook
Tip yang bagus! Saya sarankan untuk meletakkan baris set listchars ke .vimrcfile, jadi cara cantik ini menampilkan karakter yang tidak terlihat dapat dengan mudah diaktifkan :set listkapan saja (tanpa googling halaman ini lagi).
Melebius
8
@ckarbass Cara yang sama Anda beralih apa pun di vim - menambahkan! sampai akhir. Jadi itu menjadi: daftar set!
275

Pada patch 7.4.710 Anda sekarang dapat mengatur karakter untuk ditampilkan di tempat ruang menggunakan listchars!

:set listchars+=space:␣

Jadi, untuk menampilkan SEMUA karakter spasi sebagai karakter, Anda dapat melakukan hal berikut:

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

Diskusi di milis: https://groups.google.com/forum/?fromgroups#!topic/vim_dev/pjmW6wOZW_Q

Brett Y
sumber
2
Ini sangat keren, tapi saya bertanya-tanya mengapa karakter eol tidak mendapatkan warna yang berbeda, tidak seperti yang lain.
CMCDragonkai
3
Saya mencoba ini dan mendapat kesalahan pada awalnya. Ternyata "spasi" bukan opsi yang valid di versi gvim yang sedikit lebih tua yang saya gunakan. Memutakhirkan gvim saya memecahkan masalah saya. Untuk orang lain yang mendapatkan kesalahan, ketik :help listcharsuntuk memeriksa apakah "spasi" adalah opsi yang valid untuk "listchars". Jika tidak, perbarui vim Anda ke patch @brettanomyces yang ditentukan. Atau cukup biarkan "spasi" dari perintah yang ditetapkan jika Anda tidak ingin melihat spasi.
Niko Bellic
4
Saya menggunakan Dot Tengah Unicode (U + 00B7) untuk karakter spasi ( space:·), seperti MS Word, Notepad ++, dll.
Dinei
1
@ user5359531 coba <ctrl-v> u2334 untuk memasukkan karakter kotak terbuka unicode (␣). Lihat sanctum.geek.nz/arabesque/special-characters-in-vim untuk rincian lebih lanjut
Brett Y
3
Ketikkan <C-K>.Mvim untuk ·. Lihat :h digraphdetailnya.
johnchen902
252

:set list untuk mengaktifkan.

:set nolist untuk menonaktifkan.

Marcin
sumber
11
Terima kasih telah menunjukkan kepada kami cara beralih di antara mode. Anda akan berpikir jawaban lanjutan lainnya akan mengajarkan itu.
Jonathan Komar
1
ya ini sangat membantu. Saya berharap itu adalah jawaban teratas karena saya menemukan jawaban ini sendiri hanya untuk menemukan bahwa itu sudah ada di situs, tidak terlihat.
Ejoso
8
: set list!lebih baik :)
skippr
@ Skippr Dengan ukuran apa? Ini adalah jumlah penekanan tombol yang sama, kecuali itu Shiftdan !keduanya lebih sulit untuk diketik daripada no. Jika Anda meletakkannya di .vimrc Anda, saya setuju bahwa formulir exclam lebih mudah dibaca.
Dan Bechard
7
@Dan Jika Anda ingin mengaktifkan dan menonaktifkannya dalam waktu yang relatif singkat, Anda :set list!akan melakukannya tanpa perlu masuk nolist. Secara !sederhana melakukan kebalikan dari apa pun yang saat ini ditetapkan. Saya menggunakan ini sepanjang waktu terutama ketika dengan :set paste!. Saya benci menekan tombol panah untuk menemukan :set pasteatau :set nopastelol
skippr
188

Saya pikir jawaban lain di sini lebih komprehensif, tetapi saya pikir saya akan membagikan trik yang biasanya saya gunakan untuk membedakan tab dan spasi secara visual:

:syntax on
:set syntax=whitespace

Ini adalah aturan penyorotan sintaks untuk bahasa pemrograman Whitespace - tab ditampilkan dalam warna hijau dan spasi dalam warna merah. :)

Dapat dikombinasikan dengan :set listseperti yang disebutkan oleh banyak jawaban lain, meskipun tab kemudian akan ditampilkan sebagai ^ I tanpa higlight hijau, tetapi spasi akan ditampilkan dalam warna merah.

Eliot
sumber
7
Saya suka yang ini, cukup pintar, dan terasa entah bagaimana lebih baik daripada sebagian besar jawaban lainnya. Bukan solusi yang bisa digunakan setiap saat.
ComputerDruid
4
Saya lebih suka metode yang lebih konvensional, tetapi saya memberi ini +1 untuk penemuan.
Sietse van der Molen
28
Saya tahu bahwa bahasa akan berguna untuk sesuatu .
Dan Bechard
1
Apakah Anda keberatan menautkan ke file .vim sintaks yang Anda gunakan untuk menyorot
SeldomNeedy
2
@EldomNeedy Anda tidak perlu mengunduh apa pun, aturan penyorotan spasi putih telah dikirimkan bersama Vim selama bertahun-tahun. Mereka pada dasarnya harus built-in kecuali jika Anda menggunakan Vim versi aneh atau benar-benar tua.
Eliot
91

:set listakan menampilkan semua spasi putih sebagai karakter. Segala sesuatu kecuali ruang akan terlihat berbeda dari keadaan normalnya, yang berarti bahwa jika Anda masih melihat ruang lama yang polos, itu benar-benar ruang lama yang polos. :)

Eter
sumber
35
Matikan ini kembali dengan:set nolist
Greg K
6
Bagaimana jika Anda ingin melihat karakter spasi, seperti di Sublime Text 2 dengan "show whitespace" on? Saya merasa ini sangat membantu.
Olical
Bukan untuk apa saya datang ke sini tapi sangat membantu. Terima kasih.
harperville
4
Juga pilihan tanpa bisa diaktifkan dengan !di akhir:set list!
botak
Saya menggunakan satu liner, :se hls | /\_suntuk ini. Mendapat segalanya sementara set listmengabaikan ruang. Mati lagi dengan :se nohls. Detail tentang hal ini di posting ini: albertech.blogspot.com/2015/02/...
jar
73

Jika Anda mengatur:

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

dan kemudian melakukan pencarian spasi, setiap karakter spasi akan ditampilkan sebagai karakter garis bawah.

Anda dapat menggunakan perintah ini dalam fungsi praktis yang mengubah "menggarisbawahi" spasi.

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

Memetakan fungsi ke tombol cara pintas dengan:

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

NB: Tentukan fungsi dalam vimrc setelah colorscheme diatur.

mrucci
sumber
1
Yah, ini sedikit peretasan, tapi lebih dekat dari apa pun sejauh ini. Hadiah diberikan! : D
ELLIOTTCABLE
45

Bergantung pada aturan sintaks Anda untuk buffer saat ini, sesuatu seperti ini bisa berfungsi:

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

Ini membutuhkan vim 7.3 dengan fitur + sembunyikan

Perbarui 10/24/2014 Untuk sedikit memperluas tentang itu. Tentu saja mungkin untuk menentukan beberapa penyorotan untuk karakter yang dikurung.

  • Anda dapat mengkonfigurasi, bagaimana penampilan karakter yang tersembunyi. Untuk menyoroti, Anda harus setidaknya sekali mengkonfigurasi kelompok penyorotan 'Sembunyikan' (Lihat bantuan di :h hl-ConcealIni dapat dilakukan dalam skema warna Anda dan kemudian Anda tidak perlu mengkonfigurasi ulang lagi. Tetapi ini mempengaruhi semua karakter tersembunyi (misalnya jika Anda skrip sintaksis menyembunyikan beberapa item lagi, mereka akan ditampilkan sebagai karakter spasi putih Anda). Itu bisa terlihat seperti ini:

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

  • Tampaknya ada kekhususan bahwa Vim tidak akan menyoroti spasi, jika skrip sintaksis menggunakan skipwhitekata kunci. Tidak akan ada jalan lain (mungkin ini akan diperbaiki, saya diposting patch )

  • Tampaknya ada tambalan melayang, yang akan memungkinkan untuk menyesuaikan bagaimana ruang akan terlihat dalam listmode. Yang terbaru pada saat penulisan ini sepertinya adalah yang ini . (Ini berarti, Anda perlu membangun Vim Anda sendiri untuk menggunakan ini).
  • Opsi concealleveldan concealcursormerupakan jendela lokal. Itu berarti mereka bisa berbeda di windows yang berbeda (dan mungkin juga akan diatur oleh plugin tipe file atau skrip plugin lainnya).
  • Grup penyorotan sintaksis perlu dijalankan setiap kali file definisi sintaks dimuat ulang. Ini dapat dilakukan dengan menggunakan BufWinEnteratau mungkin juga Syntaxatau bahkan FileTypeautocommand. (Saya belum menguji yang mana yang benar-benar berfungsi).

Dua item terakhir berarti, Anda harus mengatur beberapa perintah otomatis yang mengatur ulang aturan sintaks dan opsi yang sesuai. Untuk yang pertama, orang mungkin ingin mengatur sorotan menggunakan perintah otomatis ColorScheme(sehingga karakter tersembunyi selalu terlihat sama, terlepas dari apa skema warna sebenarnya mengatur). Untuk solusi lengkap, lihat jawaban romainl, yang seharusnya memberi Anda permulaan. Jika Anda mengatur suatu fungsi, Anda dapat dengan mudah mengatur perintah sakelar untuk mengaktifkan atau menonaktifkan menampilkan Sorotan khusus.

Pembaruan 10/26/2014 Saya membuat plugin dari pertanyaan ini.

Pembaruan 04/22/2015 Patch telah disertakan dalam Vim yang memungkinkan ini menggunakan listopsi. Cukup atur set list listchars+=space:␣ Ini berfungsi pada Vim 7.4.711

Christian Brabandt
sumber
Ini sangat bagus! Bagaimana ini bisa ditambahkan .vimrc?
Eric Martindale
1
Karena ini berfungsi pada buffer saat ini, Anda mungkin perlu membungkus ini menjadi perintah otomatis. BufEnter atau bahkan Sintaks perintah otomatis mungkin bekerja untuk Anda:
Christian Brabandt
3
Æadalah pilihan karakter yang aneh untuk ini, mengapa tidak ·?
Marius Gedminas
1
Ini sebenarnya jawaban yang benar. Adakah ide tentang cara menambahkan penyorotan sintaksis yang tepat ke karakter ini? Saya lebih suka jika itu sangat pudar ·
serangan udara
@ChristianBrabandt, Anda memiliki banyak file yang terkait dengan nrrwrgn yang mengotori repo Anda.
romainl
31

Saya menggunakan ini

/\s
:set hlsearch

untuk menyorot spasi putih. Ia mencari semua ruang putih, dan kemudian mengaktifkan highlight untuk membuatnya muncul. Namun, itu tidak mencetak karakter khusus.

Benedikt Köppel
sumber
Solusi paling sederhana. Hebat dipasangkan dengan perintah untuk menghapus pencarian (saya menggunakan nnoremap <leader><space> :noh<cr>)
Lenna
24

Jika dengan spasi putih yang Anda maksud adalah karakter '', saran saya hanya akan menjadi pencarian / ganti. Seperti yang lain mengisyaratkan, set listperubahan non cetak karakter untuk menulis karakter yang terlihat yang dikonfigurasi dalam listchars.

Untuk secara eksplisit menunjukkan spasi sebagai beberapa karakter lain, sesuatu yang mirip dengan di bawah ini harus melakukan trik:

:%s/ /█/g

Lalu, batalkan perubahan untuk kembali lagi.

(untuk mendapatkan █ aku menekan urutan tombol yang tepat ini: :%s/ /CTRL-KFB/g)

Randy Morris
sumber
2
Saya suka ini lebih baik daripada jawaban lain, ini sepertinya kebalikan dari :set listsaya, mengubah karakter yang terlihat ('spasi') menjadi _non priting_ (??) satu. Saya bertanya-tanya apakah seseorang dapat menggunakan pertandingan dalam ini, mis. :match MyBlackBlockChar "appropriate_regexYang seharusnya melakukan trik, bukan?
Sudhi
Jawaban lain berguna, tetapi ini adalah yang pertama yang benar-benar menjawab pertanyaan OP +1
Alexx Roche
1
Atau :%s/\s/█/guntuk semua spasi putih. Juga, :set hlsearchplus :&s/\s//gnmungkin bermanfaat.
16

Untuk menyorot spasi, cukup cari:

/ <spasi>

Catatan:

  • <spasi> berarti cukup ketikkan karakter spasi.
  • Aktifkan penyorotan hasil pencarian dengan: atur hlsearch

    Untuk menyorot spasi & tab:

    / [<spasi> <tab>]

    Cara cepat untuk menghapus highlight adalah dengan mencari yang lain: / asdf

    (cukup ketik daftar pendek karakter acak)

  • vimmer
    sumber
    1
    Ini sama dengan jawaban yang diposting 3 tahun sebelumnya. Juga,: noh lebih cepat dari / asdf untuk teks yang tidak disorot. Atau Anda bahkan dapat mengatur f1 ke: noh mengingat Anda mungkin akan sering menggunakannya.
    @DrEval Dengan asumsi Anda mengacu pada jawaban Benedikt Koppel ini itu sebenarnya agak berbeda /<space>vs /\s. Saya pikir ini tidak jelas dan lebih cepat untuk menggunakan saran di sini.
    icc97
    14

    Kode di bawah ini didasarkan pada jawaban Christian Brabandt dan tampaknya melakukan apa yang diinginkan 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
    

    Tambahkan garis-garis itu ke Anda ~/.vimrcdan mulai sesi Vim baru untuk melihat keajaiban yang masih tidak sempurna terjadi.

    Jangan ragu untuk mengedit warna default dan menyembunyikan karakter.


    Peringatan: sesuatu dalam *FuncBodygrup sintaksis dalam beberapa bahasa mencegah titik tengah ditampilkan. Saya belum tahu (belum?) Bagaimana membuat solusi itu lebih dapat diandalkan.

    romainl
    sumber
    Itulah yang saya maksud dengan "tergantung pada kelompok sintaksis" Saya menduga ini adalah masalah dengan kata kunci syn dikombinasikan dengan flag skipwhite.
    Christian Brabandt
    @ChristianBrabandt, ya, saya tidak bisa melampaui apa yang sudah Anda lakukan selain menjadikannya "otomatis".
    romainl
    1
    Ya, itu skipwhiteargumen dalam aturan sintaksis, yang mencegah agar grup sintaksis tidak cocok (walaupun harus dibiarkan terkandung dalam semua grup).
    Christian Brabandt
    Apakah ada cara untuk membuat ini berfungsi baik dengan Panduan Indent , yang menambah latar belakang ke indentasi? Saya menduga ini masalah untuk tidak mengesampingkan warna latar belakang, tetapi ini tampaknya tidak sepele.
    Mike
    Bagaimana menonaktifkan yang sama ketika menyoroti ruang putih tidak diperlukan? Mencari jenis perintah toggle pendek.
    yuvaeasy
    11

    Saya merasa frustrasi dengan semua jawaban lain untuk pertanyaan ini, karena tidak ada yang menyoroti karakter ruang dengan cara yang bermanfaat. Menampilkan spasi sebagai karakter akan sangat membantu untuk bahasa yang diformat spasi, di mana mencampur tab dan spasi berbahaya.

    Solusi saya adalah menampilkan tab dan menggarisbawahi banyak spasi. Ini meminjam dari jawaban mrucci dan tutorial ini . Karena menggunakan penyorotan sintaks, ia persisten:

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

    Menggunakan ini, tab ditampilkan sebagai |dan spasi sebagai _, yang membuatnya sangat mudah untuk mengetahui kapan saya mencampur gaya kode.

    Satu-satunya downside yang saya temukan adalah bahwa potongan ini tidak menyesuaikan warna latar belakang agar sesuai dengan konteksnya (seperti dalam komentar).

    Wylie
    sumber
    8

    semua jawaban di atas mencoba membuat ruang terlihat dari dalam vim. Jika Anda benar-benar bersikeras memiliki ruang yang terlihat sebagai titik, ada pendekatan lain ...

    Jika tidak dapat dilakukan dalam vim, ubah font Anda seluruhnya. Saya menyalin font Ubuntu One Mono dan mengeditnya menggunakan FontForge. Ingatlah untuk mengubah nama lengkap font, keluarga, keluarga pilihan, kompatibel penuh (di FontFoge ini di bawah Nama TTF di info font), untuk menjadikannya sebagai font terpisah. Cukup edit karakter spasi untuk memiliki titik di tengah dan simpan font ke ~ / .fonts Sekarang Anda dapat menggunakannya untuk gvim atau seluruh terminal ... Saya menyalin "!" karakter, menghapus garis dan memindahkan titik ke tengah. Butuh sedikit lebih dari 5 menit ...

    Catatan: mengubah karakter spasi (0x20) menghasilkan ketidaknyamanan memiliki titik pada seluruh layar vim ... (tetapi itu akan memisahkan spasi dari tab ...)

    koki
    sumber
    2
    Ini kedengarannya seperti pendekatan yang sangat bagus sampai saya membaca catatan tentang mengisi seluruh layar dengan titik-titik. : /
    friederbluemle
    3
    Poin untuk kreativitas! :-)
    jpaugh
    7

    Saya tidak menemukan apa yang saya inginkan dari jawaban yang ada. Kode di bawah ini akan menyoroti semua spasi tambahan merah terang. Cukup tambahkan berikut ini ke.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()
    
    mantra
    sumber
    5
    :match CursorLine /\s\+/
    

    menghindari bit "Anda harus mencari spasi untuk membuatnya muncul" tetapi afaict tidak dapat dikonfigurasi untuk melakukan hal-hal yang tidak menarik ke spasi. CursorLine dapat berupa grup hilighting dan dalam tema defaultnya adalah garis bawah yang jelas.

    lg
    sumber
    Saya tidak bisa membedakan antara tab dan spasi menggunakan metode ini, yang terlalu buruk, tapi saya suka itu adalah satu baris.
    Rustavore
    5

    Saya suka menggunakan karakter khusus untuk menunjukkan spasi, lebih jelas. Bahkan peta untuk beralih adalah fitur utama, untuk pemeriksaan cepat.

    Anda dapat menemukan fitur ini dalam skrip vim lama yang tidak diperbarui sejak 2004:

    vim-scripts/[email protected]

    Berkat memproyeksikan vim-scripts dan vundle Anda dapat menghidupkan kembali plugin ini

    vim-scripts / cream-showinvisibles @ github

    Bahkan lebih baik, dua sen saya pada ini adalah menambahkan pintasan yang dapat dikonfigurasi (bukan yang telah ditentukan F4)

    jadi tambahkan ini ke ~ / .vimrc

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

    instal plugin di vim

    :PluginInstall
    

    dan itu dia

    Albfan
    sumber
    5

    Untuk mencakup karakter spasi 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]')
    

    Hasil:

    • hanya ruang ordinal (U + 0020) yang terlihat seperti spasi (" ")
    • tab (U + 0009) terlihat seperti " │ " (dua karakter: pipa panjang dan kemudian ruang ordinal; mereka berwarna abu-abu dalamcolorscheme murphy )
    • ruang normal tanpa putus (U + 00A0) tampak seperti " ·" (satu karakter; warnanya abu-abucolorscheme murphy )
    • karakter spasi putih lainnya seperti " " merah
    Kirill Bulygin
    sumber
    1
    Diedit untuk menambahkan "ctermbg = Merah" untuk membuat terminal saya bekerja untuk pewarnaan. Secara pribadi saya menggunakan set listchars=tab:»\ ,space:·referensi Anda.
    Johnny Wong
    @JohnnyWong Terima kasih atas pembaruannya. Awalnya ditolak oleh pengulas, tapi saya sudah memeriksa kodenya, dan itu (tidak mengejutkan) berfungsi untuk gvimdan vim.
    Kirill Bulygin
    1
    Jawaban yang brilian, inilah yang saya butuhkan untuk menangkap ruang tanpa istirahat sempit (Hex 202f) yang tidak ditampilkan di Safari dan Firefox.
    Chris Kobrzak
    4

    Anda bisa menggunakannya

    :set list
    

    untuk benar-benar melihat struktur garis. Anda akan melihat tab dan baris baru secara eksplisit. Ketika Anda melihat kosong, itu benar-benar kosong.

    tangens
    sumber
    3

    sorot pencarian

    :set hlsearch 
    

    dalam .vimrchal itu

    dan mencari tab ruang dan carriage return

    / \|\t\|\r
    

    atau cari semua karakter spasi putih

    /\s
    

    pencarian semua karakter spasi bukan putih (karakter spasi tidak ditampilkan, sehingga Anda melihat karakter spasi putih di antara kata-kata, tetapi bukan karakter spasi spasi tambahan)

    /\S
    

    untuk menampilkan semua karakter spasi spasi putih - di akhir baris

    /\s$
    
    MichaelMoser
    sumber
    3

    Simpan peretasan itu di .vimrc sebagai komentar, jadi di shell, cukup:

    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
    
    Yordan Georgiev
    sumber
    1
    :se list
    :se nolist
    

    :sesudah cukup, :settidak diperlukan.

    sja
    sumber
    1

    Anda juga dapat menyorot spasi (mengganti spasi dengan blok):

    :%s/ /█/g
    

    (sebelum menulis batalkan)

    Federico Bucchi
    sumber
    1

    Menambahkan ini ke .vimrc saya berfungsi untuk saya. Pastikan Anda tidak memiliki hal lain yang bertentangan ..

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