有什么配置可以让光标快速从括号里移动到右括号后吗? #4937
-
我的意思是,当我选择了某项选中项后,比如说下图的函数(宏),我的光标会自动移动到括号里,方便我写入参,但是我想在写完入参后,也很方便地将光标移动到右括号后边,方便我写statement的分号。简而言之,就是实现IDE工具中类似tab键的功能,光标会智能地选择执行缩进还是移动到右括号后。有什么配置可以做到吗? |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 3 replies
-
如果补全项是 snippet,可以用 |
Beta Was this translation helpful? Give feedback.
-
想到了一个可行的方案,我去看了auto pairs的文档,如果我们额外安装一个auto pairs插件,我们就可以保持在insert模式将光标从括号内移到括号外,当然除了括号那些""什么的也行,具体看auto pairs文档吧。 |
Beta Was this translation helpful? Give feedback.
-
我想到一个绝妙的方案解决这个问题,这个想法基于 Map <tab> for trigger completion, completion confirm, snippet expand and jump
like VSCode:
inoremap <silent><expr> <TAB>
\ coc#pum#visible() ? coc#_select_confirm() :
\ coc#expandableOrJumpable() ?
\ "\<C-r>=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\<CR>" :
\ CheckBackspace() ? "\<TAB>" :
\ coc#refresh()
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
let g:coc_snippet_next = '<tab>' 于是我写了一个判断下一个字符是否属于成对符号之一的函数: function! NextCharIsPair() abort
let col = col('.') - 1
let l:next_char = getline('.')[col]
return l:next_char =~# ')\|]\|}\|>\|''\|"\|`'
endfunction 当符合这种情况时,我们使用Tab键执行一个向右->的操作来跳出成对符号内部: inoremap <silent><expr> <Tab>
\ coc#pum#visible() ? coc#_select_confirm() :
\ coc#expandableOrJumpable() ?
\ "\<C-r>=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\<CR>" :
\ NextCharIsPair() ? "\<Right>" : " 向右跳出成对符号内部
\ CheckBackspace() ? "\<Tab>" :
\ coc#refresh() 然后我把上面的配置放到了 @fannheyward 这个方案您觉得可行吗? 如果可以的话,我可以提交一个PR吗?这也是我第一次尝试对开源项目做贡献,如果尽到绵薄之力的话也会感到很开心的!我认为这个方案可以在 |
Beta Was this translation helpful? Give feedback.
如果补全项是 snippet,可以用
<C-j>
(可以通过:h coc_snippet_next
修改快捷键)跳到下一个位置,如果不是 snippet,没办法直接跳出。