0

给定代码,是否有某种 Vim 插件可以让我做这样的事情:

function something (arbitraryObject) {
  arbitraryObject.something = doesNotMatter;
}

然后假设我只是选择arbitraryObject函数体中的单词,我想要一种简单的方法来编写一个宏,给定一个简短的组合键或命令模式命令,可以给我类似的东西:

function something (arbitraryObject) {
  arbitraryObject.something = doesNotMatter;
  console.log(arbitraryObject);
}

或者...

function something (arbitraryObject) {
  arbitraryObject.something = doesNotMatter;
  window.arbitraryObject = arbitraryObject;
}

请注意,我不是在问这个宏实际上是什么样子,我很好奇是否有内置工具或插件可以使创建这样的东西特别容易。

4

3 回答 3

2

我知道您不是在要求特定的宏,但是通过示例来学习这些类型的东西是最容易的。第一个(console.log)可以通过这个映射来实现:

:vmap <leader>il y<esc>oconsole.log(<c-r>");<esc>

同样,第二个可能如下所示:

:vmap <leader>iw y<esc>owindow.<c-r>" = <c-r>";<esc>

你能发现相似之处吗?<leader>il表示该命令绑定到领导键(通常,),i后跟l. 您可以通过:help [key]在 vim 中使用来检查以下命令的含义,但映射基本上是yank(复制)选定的文本,输入一个新行(Esc, o),然后附加一些文本,后跟Ctrl+r",插入被抽出的文本。

于 2012-07-23T22:38:09.450 回答
1

一种选择是使用snipMate.vim 之类的东西,并为您的各种任务提供片段。例如,您可以创建这些片段:

snippet cons
  console.log(${1:variable});${2}
snippet wind
  window.${1:attribute} = $1${2}

然后你可以做类似的事情yocons<Tab><C-r>"<Tab>,或者类似的事情yowind<Tab><C-r>"<Tab>。您也可以使用yiw而不是视觉选择。我喜欢这样的选项,因为这样您就可以轻松地使其仅适用于特定类型的文件类型(例如 javascript),并继续扩展您已经存在的片段。

于 2012-07-23T22:57:16.490 回答
0
nmap <Leader>l o<esc>pv^"xygv[ygvdiconsole.log(<esc>a"<esc>pa",<esc>"xpa);<esc>

这是更好的选择,因为它在 vim-unpared 的帮助下引用字符串。只需 yank 文本,您需要记录并使用此密钥绑定。它转换

this.$el.find("input,select,textarea")

console.log("this.$el.find(\"input,select,textarea\")",this.$el.find("input,select,textarea")); 
于 2014-01-02T09:00:42.753 回答