这是我的数据:
1.333840,2,3,4,5,6,7,8
1.xxxxxx,2,3,4,5,6,7,8
1.yyyyyy,2,3,4,5,6,7,8
1.zzzzzz,2,3,4,5,6,7,8
我想要做的是让Vim记住我插入的列的位置。这对于处理我上面的固定条目表非常方便。我希望保持插入 REPLACE 模式,但最大限度地减少光标的使用,覆盖上面的模板数据。
xxxxxx应为444444 yyyyyy应该是555555 zzzzzz应该是666666
我想要做的是从第1行第3列开始并输入
i444444<spreadsheetenter>555555<spreadsheetenter>666666<esc>
是否有特殊模式或键绑定可以帮助我这样做?基本上,当我重新进入插入模式时,将返回保持在同一固定列。
答案 0 :(得分:5)
R
例如,对于您的问题,我会:
*
)位于*333840
,按R
,开始覆盖<ESC>jbR
,光标将转到*xxxxxx
,然后准备替换您可以为此类作业创建映射,例如:
inoremap <leader>g <esc>jbR
它的工作原理如下:
答案 1 :(得分:1)
您可以为<spreadsheetenter>
尝试以下映射:
:nnoremap <S-CR> g`[j
:inoremap <S-CR> <Esc>g`[jR
这是一个更复杂的插入模式变体,它保持模式(插入与(虚拟)替换):
function! s:GetCurrentInsertMode()
let s:currentInsertMode = mode()
return ''
endfunction
function! s:RestartCurrentInsertMode()
if s:currentInsertMode ==# 'i'
startinsert
elseif s:currentInsertMode ==# 'R'
startreplace
elseif s:currentInsertMode ==# 'Rv'
startgreplace
else
throw 'ASSERT: Unknown mode: ' . string(s:currentInsertMode)
endif
endfunction
inoremap <silent> <expr> <SID>(GetCurrentInsertMode) <SID>GetCurrentInsertMode()
inoremap <silent> <script> <S-CR> <SID>(GetCurrentInsertMode)<C-\><C-n>g`[j:call <SID>RestartCurrentInsertMode()<CR>
答案 2 :(得分:1)
试试csv插件。它默认在(虚拟)替换模式中执行此操作。