所以我试着编写一个能让插入半冒号更加愉快的功能:
inoremap <leader>; <esc>:call InsertSemiColin()<cr>
基本上它检查我是否站在当前行的末尾,如果是,我自动格式化代码,在末尾插入分号并分解到下一行(回车) )
fun! InsertSemiColin()
if (!IsEOL()) | exec "normal! a;" | return | endif
exec "normal! \<esc>:OmniSharpCodeFormat\<cr>A;\<cr>"
endf:
fun! IsEOL()
" col number == length of current line?
return col('.') == strlen(getline(line('.'))) " or just getline('.')
endf
期望:
结果:
要自行尝试,可以删除代码格式,然后执行以下操作:
exec "normal! a;\<cr>"
我的缩进设置:
set smartindent
set tabstop=4
set shiftwidth=4
filetype plugin indent on
奇怪的是,如果我没有从函数中插入回车符,它会按预期工作!
inoremap <leader>; ;<cr>
为什么会这样?我怎样才能得到我期待的结果?
非常令人沮丧,任何帮助都将不胜感激!
答案 0 :(得分:1)
我会避免离开并通过:help :map-expr
重新进入插入模式:
inoremap <expr> <leader>; ';' . (IsEOL() ? '<esc>:OmniSharpCodeFormat<cr>A<cr>' : '')
为此,您需要更改IsEOL()
功能中的比较:
fun! IsEOL()
" col number == length of current line?
return col('.') > strlen(getline(line('.'))) " or just getline('.')
endf
这也解决了缩进问题。