vimrc 中多行缩写中制表符/空格的 vim 问题

vimrc 中多行缩写中制表符/空格的 vim 问题

我正在尝试编写一个vim缩写来在c中创建一个模板程序

我在 .vimrc 中给出了如下缩写

abbr main #include<stdio.h>
\^M#include<string.h>
\^M#include<math.h>
\^M#include<stdlib.h>
\^M
\^Mint main() {
\^M int T, N;
\^M scanf("%d", &T);
\^M while(T-- > 0) {
\^M     scanf("%d", &N);
\^M }
\^M return 0;
\^M}

当我输入单词 时main,缩写就会生效,但缩进不正确。我尝试只使用空格/制表符/组合,但没有任何东西可以完美地缩进代码。为什么?

缩写扭曲

有什么帮助吗?

更新:我尝试过

 abbr main #include<stdio.h>
\<CR>#include<string.h>
\<CR>
\<CR>int main() {
\<CR>int T, N;
\<CR>scanf("%d", &T);
\<CR>while(T-- > 0) {
\<CR>scanf("%d", &N);
\<CR>}
\<CR>return 0;
\<CR>}

它会导致相同的结果。谁能告诉我如何添加具有正确缩进的多行缩写?

答案1

其实我认为你的问题是XY问题:我认为你的实际问题How can I do a multiline abbreviation?不是How can I easily add a sample function with a few keystrokes?。如果你想这样做,你不应该使用缩写而应该使用片段。

为什么不用缩写呢?

首先我们来看看:h abbreviations:

[缩写]可用于节省经常使用的长单词的输入。您可以使用它自动纠正明显的拼写错误。

缩写是针对小于整个功能的更改而制作的,这根本不是目标。您想要做的通常是创建一个片段,以及一些伟大的工具已经存在,因此您不必重新发明轮子。

什么是片段?

为了保持清晰和简洁,我将引用维基百科:

代码片段是一个编程术语,指一小部分可重用源代码、机器代码或文本。

我如何获得一些片段?

首先,您需要一个片段存储库。当然你可以一一手动创建它们,但是 Vim 有一个很酷的社区,它已经解决了你的问题并解决了它。

所以Vim 片段就是您正在寻找的内容:包含 60 多种语言的数百个片段(包括 C main() 函数)这是一个很好的基础。当然,如果您发现缺少片段,您可以添加自己的片段。

我该如何使用这些片段?

现在您已经有了片段,您需要一个片段引擎,它允许您将它们添加到缓冲区中。 vim-snippets 的自述文件有一段专用于支持的引擎。

我会推荐乌尔蒂斯尼普斯但这只是个人问题,您应该尝试建议的不同引擎,看看哪一个是您最喜欢的。

我怎样才能得到它?

如果您使用的是插件管理器这很容易。例如与vim 插件您只需将此行添加到您的.vimrc

Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'

然后您可以按照以下推荐的基本配置进行操作ultisnips 自述文件:

let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"

使用后,:PluginInstall您可以开始使用您的片段tab

相关内容