我正在尝试定义一个vi'map'命令序列,它将当前单词包装在HTML标记内,例如B(粗体)标记.地图定义如下:
:map K ebi<B><esc>ea</B><esc>
Run Code Online (Sandbox Code Playgroud)
地图以动作"eb"开始移动到所选单词的开头,假设最可能的光标位置是单词的开头或中间.问题是,如果光标位于单词的最后一个字符上,则它不起作用 - 然后将包装后面的单词.
有没有一个技巧可以让这个地图可靠地用于任何一个单词的光标位置?
如果这是一个一次性的地图,那很好,但如果你想做更多,或者更频繁地做,你最好使用带有surround.vim的文本对象.
如果您使用该脚本,您可以(在正常模式下)
ysiwtb>
Run Code Online (Sandbox Code Playgroud)
你必须按字面意思输入.ys是告诉surround.vim听一个文本动作.iw选择您当前所在的单词.t告诉它你要用标签包围.b>告诉它你要使用哪个标签.
即使您不想使用surround.vim,也可以考虑:help text-objects在地图中使用text-objects().在iw或inner-word文本对象是你想要的这里,但我不太知道如何来包装起来的地图呢.
编辑:我想到如何在地图中使用它,这里...
:map K viwO<Esc>i<b><Esc>lviw<Esc>a</b><Esc>
Run Code Online (Sandbox Code Playgroud)
这会将光标留>在结束标记的结束处.它应该在光标最初的任何地方都可以工作.
但就像我说的那样,surround.vim更可取.