Summary
Vim
で
-
全角スペースを表示
-
全角スペースを半角スペースに変換
-
文末の全角スペースを削除
全角スペースを表示する
autocmd MyAutoCmd ColorScheme * highlight UnicodeSpaces ctermbg=131 guibg=#af5f5f
autocmd MyAutoCmd BufRead,BufNewFile * call matchadd(
\ 'UnicodeSpaces', '\v' .
\ '%u180E|%u2028|%u2029|%u00A0|%u2000|%u2001|' .
\ '%u2002|%u2003|%u2004|%u2005|%u2006|%u2007|' .
\ '%u2008|%u2009|%u200A|%u202F|%u205F|%u3000'
\ )
全角スペースを半角スペースにする
command! Spaces call s:spaces()
function! s:spaces() abort
" mark origin position
:normal! ma
let l:range = '%'
let l:unicodeSpaces = '\v' .
\ '%u180E|%u2028|%u2029|%u00A0|%u2000|%u2001|' .
\ '%u2002|%u2003|%u2004|%u2005|%u2006|%u2007|' .
\ '%u2008|%u2009|%u200A|%u202F|%u205F|%u3000'
let l:space = ' '
" Replace unicode spaces to normal space
:execute l:range 'substitute' '/\v(' . l:unicodeSpaces . ')/' . l:space . '/ge'
" back to origin position
:normal! `a
endfunction
文末の半角・全角スペースのみ削除する
command! TrimEnd call s:trimEnd()
function! s:trimEnd() abort
" mark origin position
:normal! ma
let l:range = '%'
let l:unicodeSpaces = '\v' .
\ '%u180E|%u2028|%u2029|%u00A0|%u2000|%u2001|' .
\ '%u2002|%u2003|%u2004|%u2005|%u2006|%u2007|' .
\ '%u2008|%u2009|%u200A|%u202F|%u205F|%u3000'
let l:space = '\v\s'
" Trim end spaces
:execute l:range 'substitute' '/\v(' . l:unicodeSpaces . '|' . l:space . ')+$//ge'
" back to origin position
:normal! `a
endfunction
Thanks
@mattn
@koron
@thinca
@yaegassy
@m_nish
See also
Vimで全角空白以外のユニコードの空白文字もハイライト&取り除く
Table Unicode space characters( 下記のホームページを参考に作成)
[page11 Table 6-2.Unicode Space Characters]
(http://www.unicode.org/versions/Unicode11.0.0/ch06.pdf)
Code Char Regex Name
--------------------------------------------------------
[Cf] U+180E %u180E MONGOLIAN VOWEL SEPARATOR
[ZI] U+2028 %u2028 LINE SEPARATOR
[Zp] U+2029 %u2029 PARAGRAPH SEPARATOR
[Zs] U+00A0 %u00A0 NO-BREAK SPACE
[Zs] U+2000 %u2000 EN QUAD
[Zs] U+2001 %u2001 EM QUAD
[Zs] U+2002 %u2002 EN SPACE (nut)
[Zs] U+2003 %u2003 EM SPACE (mutton)
[Zs] U+2004 %u2004 THREE-PER-EM SPACEk space)
[Zs] U+2005 %u2005 FOUR-PER-EM SPACE (space)
[Zs] U+2006 %u2006 SIX-PER-EM SPACE
[Zs] U+2007 %u2007 FIGURE SPACE
[Zs] U+2008 %u2008 PUNCTUATION SPACE
[Zs] U+2009 %u2009 THIN SPACE
[Zs] U+200A %u200A HAIR SPACE
[Zs] U+202F %u202F NARROW NO-BREAK SPACE
[Zs] U+205F %u205F MEDIUM MATHEMATICAL SPACE
[Zs] U+3000 %u3000 IDEOGRAPHIC SPACE