有人可以告诉我如何在 Vim 中执行与此映射相反的操作:
nnoremap <leader>iw :let _s=@/<Bar>:let _s2=line(".")<Bar>:%s/^\s*/&&/ge<Bar>:let @/=_s<Bar>:nohl<Bar>exe ':'._s2<CR>
作为澄清:此映射加倍(&&
部分)每行开头的空白字符数。
仅第一个常规字符之前的空格受到影响。
当前搜索字符串保持不变(通过_s
多变的)。
在此转换后,光标位置将恢复(通过_s2
多变的)。
所以,基本上,我正在寻找一种映射,如果它们相继执行,该映射将撤消此映射。
我无法弄清楚如何限制这个新操作仅适用于第一个常规字符之前的空白。
以下替代命令反转其效果
使前导空白加倍的对应项。
:%s/^\(\s*\)\1/\1/
为此命令构建的映射需要遵循相同的
模式与问题中使用的模式相同(替换除外)
当然要执行)。为了减少定义中的重复,一
可以将状态保存代码分成一个小函数:
nnoremap <silent> <leader>> :call PinnedCursorDo('%s/^\s*/&&/')<cr>
nnoremap <silent> <leader><lt> :call PinnedCursorDo('%s/^\(\s*\)\1/\1/')<cr>
function! PinnedCursorDo(cmd)
let [s, c] = [@/, getpos('.')]
exe a:cmd
let @/ = s
call setpos('.', c)
endfunction
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)