执行命令时,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 次 |
最近记录: |