Vim中实现下一行缩进多于当前行的方法求助
解决YAML编辑时下一行缩进多于当前行的问题
一、原映射失效原因
你之前写的imap <8b>^M ^M<8b><8b>不生效,是因为<8b>不是Vim中表示空格的正确特殊字符,属于输入错误的乱码(大概率是误输入退格符<BS>的ASCII编码)。Vim中表示空格要么直接输入空格,要么用<Space>;回车则用<CR>(替代^M更直观)。
二、基础映射方案
如果想实现按1个空格+回车,下一行在自动缩进基础上多1个tabstop,可以在Vim配置中添加:
inoremap <expr> <Space><CR> <CR> . repeat(' ', &tabstop)
如果需要按2个空格+回车,下一行多2个tabstop,再添加:
inoremap <expr> <Space><Space><CR> <CR> . repeat(' ', &tabstop * 2)
- 原理:
<expr>让映射支持表达式计算,repeat(' ', &tabstop)会根据你设置的tabstop值自动生成对应数量的空格,结合autoindent特性,下一行缩进就是当前行缩进+新增的空格数。
三、更优雅的优化方案
为了不影响正常的空格+回车操作,可以改用组合快捷键(比如Ctrl+空格+回车)避免误触:
inoremap <expr> <C-Space><CR> <CR> . repeat(' ', &tabstop) inoremap <expr> <C-Space><C-Space><CR> <CR> . repeat(' ', &tabstop * 2)
另外,建议把这些映射放到~/.vim/after/ftplugin/yaml.vim文件中,这样只会在编辑YAML文件时生效,不干扰其他类型文件的编辑。
内容的提问来源于stack exchange,提问作者Sergey Guzenkov
相关产品推荐
相关产品推荐

