在 vim 缩写内定义 linux 命令

Defining linux command inside vim abbreviations

我在使用 vim 编辑器时经常使用缩写。 现在我想在 /etc/vimrc.

中定义 vim 缩写时使用 Linux 命令

我尝试了各种方法,但 none 成功了。

我的用例:

内部vim:当我输入#!然后输入 "tab" 键,那么输出应该是:

   #! /usr/bin/env bash
   #Author: Dhimant
   #Date: Realtime date at which command is fired
   #Description:

我使用 "cr" 标签完成了前两行

ab #!   #!/usr/bin/env bash<cr>#author: Dhimant Thanki

但是当使用"date command"时,它不起作用

ab #!   #!/usr/bin/env bash<cr>#author: Dhimant Thanki <cr>#Date: `date` <cr>#Task: (NOT WORKING)

因此需要帮助才能完成此任务。 感谢任何帮助。

您可以使用 <C-r>= 插入 Vim 表达式:

iabbr xxx # Date: <C-r>=strftime('%c')<CR><CR># Second line

注意两个 <CR>:一个用于结束表达式,一个用于插入换行符。

我在这里使用 strftime() 而不是 date shell 命令,因为这样更简单并且适用于所有平台,但如果你也可以使用 <C-r>=system('date')[:-2]<CR>更喜欢([:-2] 是删除尾随的换行符)。

参见::help abbreviations, :help c_<C-R>

您输入的 <cr> 将按字面解释为字母 <cr>

为了转到新行,您可以使用 <ESC> 返回命令模式,然后使用 o.

O - Begin a new line above the cursor and insert text, repeat [count] times.

o - Begin a new line below the cursor and insert text, repeat [count] times.

例如:

ab #! #!/usr/bin/env bash<ESC>o#author: ErectCrested<ESC>o#Some more text<ESC>o

如果要在缩写后换行开始插入,请使用最后一个 <ESC>o,否则将其删除。

您应该使用代码段引擎来实现您想要的。首先,您需要安装 ultisnips. See here 如何设置 ultisnips 以识别您自己的代码片段。

在您的自定义代码段目录下,创建一个名为 all.snippets 的文件并将以下内容添加到此文件:

snippet #! "bash file header"
#Author: Dhimant
#Date: `!v strftime('%c')`
#Description: just for a test
endsnippet

在上面的代码片段中,!v 用于执行 Vim 命令,在本例中,strftime() 用于获取当前时间。

然后打开一个新文件并输入#!并按Tab键。繁荣,您的自定义 header 已创建。