导航时如何将前导空格视为Vim中的制表符?
基本上,我有以下符合PSR-2规范的设置:导航时如何将前导空格视为Vim中的制表符?,vim,Vim,基本上,我有以下符合PSR-2规范的设置: set tabstop=4 set shiftwidth=4 set softtabstop=4 set expandtab set smarttab PSR-2要求缩进为4个空格。这很好,但我习惯于使用真正的制表符而不是空格,所以如果我在一行的开头,我向右移动,而不是移动到第一个缩进字符,它一次移动一个空格 有没有办法让vim以相同的方式处理这些前导空格,即在正常模式和插入模式下导航时“跳转”到第一个非空格字符 我知道我可以使用^将光标放在第一个非
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set smarttab
PSR-2要求缩进为4个空格。这很好,但我习惯于使用真正的制表符而不是空格,所以如果我在一行的开头,我向右移动,而不是移动到第一个缩进字符,它一次移动一个空格
有没有办法让vim以相同的方式处理这些前导空格,即在正常模式和插入模式下导航时“跳转”到第一个非空格字符
我知道我可以使用
^
将光标放在第一个非空白字符上,但我不习惯这样做,而且它不像简单的导航那样方便。将下面的内容放入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
函数!s:超级左()
返回getline('.')[:col('.')]=~'^\s\+$'?'w':“l”
端功能
奥群超左
哎呀!
autocmd文件类型php nnoremap l super_left()
螺旋端
我认为您最好习惯使用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
nnoremap:silent call SkipSpace()
功能!SkipSpace()
设curcol=col('.'))
执行“正常^”
设hatcol=col('.'))
如果curcol>=hatcol
“向右移动一个空格
设newcol=curcol+1
elseif curcol+4>hatcol
“如果距离下一个单词的开头少于4个空格,则移动到该单词的开头
让newcol=hatcol
其他的
“向右移动4个空格
设newcol=curcol+4
恩迪夫
执行“normal”.newcol.。|”
端功能
注意:为了好玩,请查看
:help |
vim
有几个运动快捷键。例如,您可以点击w
移动到行中的第一个单词。有关更多信息,请参阅谷歌vim motion
。