执行命令时,ci"Vim 将编辑行中下一个带引号的字符串内的文本,即使光标在引号外。但是,ci(只有在光标位于括号内时才有效。
为什么?可以ci(使跳转到第一次出现的(asci"吗?
我正在玩的示例文本(使用 Erlang 语法):
?assertEqual({200, "OK"}, status(FirstResponse)),
% ^
% Here I'm expecting ci( to jump in to the parenthesis ( ci" works)
Run Code Online (Sandbox Code Playgroud)
小智 5
快速浏览文档 ( help v_aquote, help v_iquote) 后,我倾向于说这是 中的错误ci",而不是 中的缺陷ci(。观察到的ci(行为与ci{和一致ci[。
也就是说,您可以ci(通过此映射获得所需的行为:
nnoremap ci( f(ci(
Run Code Online (Sandbox Code Playgroud)
- - 编辑 - -
---(此问题已迁移到超级用户,我不是其中的成员)
以下函数/映射根据是否(检测到前一个而具有不同的行为。它解决了(a) (b)我原始映射的问题(如评论中所指出的)。虽然它可能仍然不完美......
function New_cib()
if search("(","bn") == line(".")
sil exe "normal! f)ci("
sil exe "normal! l"
startinsert
else
sil exe "normal! f(ci("
sil exe "normal! l"
startinsert
endif
endfunction
nnoremap ci( :call New_cib()<CR>
nnoremap cib :call New_cib()<CR>
Run Code Online (Sandbox Code Playgroud)
原因是:大括号、尖括号和大括号成对出现。因此,它们可以筑巢。
单引号和双引号一般不能嵌套(除了在有"$("something")"语法的bash脚本中,所以即使光标不在里面也可以找到文本对象,因为不能有任何外部对象。
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |