导航时如何将前导空格视为 Vim 中的制表符?
How to treat leading spaces as tabs in Vim when navigating?
基本上我有以下 PSR-2 代码合规性设置:
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set smarttab
PSR-2 要求缩进为 4 spaces。很好,但我习惯了真正的制表符而不是 spaces,所以如果我在一行的开头,我向右移动,而不是移动到第一个缩进字符,它会移动到一个space 一次。
有没有办法让vim对这些前导space的处理方式相同,即对第一个非space字符"jump"在正常模式和插入模式下导航时?
我知道我可以使用 ^
将光标放在第一个非白色 space 字符上,但我不习惯,而且它不如简单导航那么方便。
将下面的内容放入你的 vimrc
function! s:super_left()
return getline('.')[:col('.')] =~ '^\s\+$' ? 'w' : 'l'
endfunction
augroup SuperLeft
au!
autocmd FileType php nnoremap <expr> l <sid>super_left()
augroup END
我认为你最好习惯使用 vims 更强大的移动命令,例如 ^
。
话虽这么说,但这是您可以实现目标的一种方法。
nnoremap <right> :silent call SkipSpace()<cr>
function! SkipSpace()
let curcol = col('.')
execute "normal ^"
let hatcol = col('.')
if curcol >= hatcol
" move one space right
let newcol = curcol + 1
elseif curcol + 4 > hatcol
" move to the start of the next word if it is less than 4 spaces away
let newcol = hatcol
else
" move 4 spaces right
let newcol = curcol + 4
endif
execute "normal " . newcol . "|"
endfunction
P.S。如果想找点乐子,请查看 :help |
基本上我有以下 PSR-2 代码合规性设置:
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set smarttab
PSR-2 要求缩进为 4 spaces。很好,但我习惯了真正的制表符而不是 spaces,所以如果我在一行的开头,我向右移动,而不是移动到第一个缩进字符,它会移动到一个space 一次。
有没有办法让vim对这些前导space的处理方式相同,即对第一个非space字符"jump"在正常模式和插入模式下导航时?
我知道我可以使用 ^
将光标放在第一个非白色 space 字符上,但我不习惯,而且它不如简单导航那么方便。
将下面的内容放入你的 vimrc
function! s:super_left()
return getline('.')[:col('.')] =~ '^\s\+$' ? 'w' : 'l'
endfunction
augroup SuperLeft
au!
autocmd FileType php nnoremap <expr> l <sid>super_left()
augroup END
我认为你最好习惯使用 vims 更强大的移动命令,例如 ^
。
话虽这么说,但这是您可以实现目标的一种方法。
nnoremap <right> :silent call SkipSpace()<cr>
function! SkipSpace()
let curcol = col('.')
execute "normal ^"
let hatcol = col('.')
if curcol >= hatcol
" move one space right
let newcol = curcol + 1
elseif curcol + 4 > hatcol
" move to the start of the next word if it is less than 4 spaces away
let newcol = hatcol
else
" move 4 spaces right
let newcol = curcol + 4
endif
execute "normal " . newcol . "|"
endfunction
P.S。如果想找点乐子,请查看 :help |