Vim宏:记录/变量化所选对象

Vim宏:记录/变量化所选对象,vim,macros,Vim,Macros,在给定代码的情况下,是否有某种Vim插件允许我执行类似的操作: function something (arbitraryObject) { arbitraryObject.something = doesNotMatter; } 然后让我们假设我只是在函数体中选择单词arbitraryObject,我想用一种简单的方法来编写一个宏,给定一个短键组合或命令模式命令,可以给我类似以下内容: function something (arbitraryObject) { arbitraryO

在给定代码的情况下,是否有某种Vim插件允许我执行类似的操作:

function something (arbitraryObject) {
  arbitraryObject.something = doesNotMatter;
}
然后让我们假设我只是在函数体中选择单词
arbitraryObject
,我想用一种简单的方法来编写一个宏,给定一个短键组合或命令模式命令,可以给我类似以下内容:

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


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

我知道你不是在问具体的宏,但通过示例学习这些类型的东西是最容易的。第一个(console.log)可以通过以下映射实现:

:vmap <leader>il y<esc>oconsole.log(<c-r>");<esc>
:vmap il yoconsole.log(“);
类似地,第二个可以如下所示:

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

你能找出相似之处吗?
il
意味着命令绑定到leader键(通常是,)后面跟着i,后面跟着l。你可以通过在vim中使用
:help[key]
来检查以下命令的含义,但映射基本上是拖动(复制)所选文本,进入一个新行(Esc,o)然后添加一些文本,后跟Ctrl+r和“,插入被拉扯的文本。

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

:vmap <leader>il y<esc>oconsole.log(<c-r>");<esc>
:vmap il yoconsole.log(“);
类似地,第二个可以如下所示:

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

你能找出相似之处吗?
il
意味着命令绑定到leader键(通常是,)后面跟着i,后面跟着l。你可以通过在vim中使用
:help[key]
来检查以下命令的含义,但映射基本上是拖动(复制)所选文本,进入一个新行(Esc,o)然后添加一些文本,后跟Ctrl+r和“,插入被拉长的文本。

一个选项是使用类似的内容并为各种任务提供代码段。例如,您可以创建以下代码段:

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

然后你可以做一些类似于
yocons“
,或者类似的
yowind”
。您也可以使用
yiw
,而不是直观地选择。我喜欢这样的选项,因为这样您就可以轻松地使其仅适用于特定类型的文件类型(例如javascript),并继续扩展您已经存在的代码段。

一个选项是为您的各种任务使用类似的代码段。例如,您可以创建以下代码段:

snippet cons
  console.log(${1:variable});${2}
snippet wind
  window.${1:attribute} = $1${2}
nmap <Leader>l o<esc>pv^"xygv[ygvdiconsole.log(<esc>a"<esc>pa",<esc>"xpa);<esc>
然后你可以做一些类似于
yocons“
,或者类似的
yowind”
。您也可以使用
yiw
,而不是直观地选择。我喜欢这样的选项,因为这样您就可以轻松地使其仅适用于特定类型的文件类型(例如javascript),并继续扩展您已经存在的代码段

nmap <Leader>l o<esc>pv^"xygv[ygvdiconsole.log(<esc>a"<esc>pa",<esc>"xpa);<esc>


这很容易实现。很遗憾,你不想看到它的样子。这很容易实现。很遗憾,你不想看到它的样子。这是最接近我所寻找的,只是困扰我的是,可能有很多我想要的不同语言(例如,Ruby的
ap
),我希望有像SnipMate这样实用的东西,在这里我可以定义这样的宏,选择一个单词,键入正确的命令,并执行宏。我想我可以这样做,只需创建定义良好、名称空间和组织有序的快捷方式。对于常用的宏,您可以向vimrc添加几个自动命令()。您应该在这里使用
vnoremap
。它产生了更稳定的结果。为什么用户自己的映射需要
?我从来没有得到它,只对插件使用
。二,。当
时,
设法成为领导者的常用值,而不是默认值?逗号确实是常见的自定义值,但用户保持原样更为常见。@ZyX,我相信
:let mapleader=“,”
的广泛应用来自。我使用
进行自定义映射,因为我喜欢为每个非内置命令提供一个通用的“接口”:我自己的映射和来自第三方插件的映射。这与我所寻找的最接近,只是困扰我的是,不同语言可能需要大量的映射(即Ruby的
ap
),而不仅仅是用于调试的日志记录和分配。我希望有像SnipMate这样实用的东西,在这里我可以定义这样的宏,选择一个单词,键入适当的命令,然后执行宏。我想我可以这样做,只需创建定义良好、名称空间和组织有序的快捷方式。您可以添加一个自动命令的uple()你应该在这里使用
vnoremap
。它会产生更稳定的结果。顺便说一句,1.为什么用户自己的映射需要
?我从来都不明白,只对插件使用
。2.当
成为领导者的常用值,而不是默认值时,它是t遗憾的是逗号是常见的自定义值,但用户保持原样更为常见。@ZyX,我相信广泛使用的
:let mapleader=“,”
来自。我使用
进行自定义映射,因为我喜欢有一个通用的“界面”对于每个非内置命令:我自己的映射和来自第三方插件的映射。投票给你,因为这是一个有用的方法,但不完全是我想要的。谢谢!投票给你,因为这是一个有用的方法,但不完全是我想要的。谢谢!