我的.vimrc
中有以下缩写:
:iab stdio #include <stdio.h>
是否可以仅在stdio
前面没有<
时进行替换,这样如果我粘贴的代码中包含#include <stdio.h>
行,则不会扩展到以下
#include <#include <stdio.h>.h>
答案 0 :(得分:4)
可能有一种比这更简单的方法,但这就是我所做的。
function! InsertHeader(replacement, mapping)
if getline('.')[col('.')-len(a:mapping)-2] != '<'
return a: replacement
endif
return a:mapping
endfunction
iabbrev <expr> stdio InsertHeader('#include <stdio.h>', 'stdio')
我使用了一个函数,如果返回映射,则检查映射是否前面有<
。如果没有返回您返回的替换件。返回值是被替换的。
重新阅读这个问题似乎是在粘贴代码。在粘贴任何内容之前使用
:set paste
这会阻止任何缩写激活。粘贴后使用
:set nopaste
(或使用:set paste!
切换它)
答案 1 :(得分:0)
我希望将其映射为以下内容,以便stdio
只有在<leader>
被按下之前才会展开。因此,如果您的<leader>
为,
,则键入,stdio
会在仅键入时展开它
stdio
不会展开它。您可以通过将以下行添加到vimrc
(但请记住先禁用旧的缩写)来尝试。
inoremap <leader>stdio #include <stdio.h>
但是,如果您想在问题中提问,可以从VimTips上获取提示,这解释了如何仅在快捷方式上扩展缩写
答案 2 :(得分:0)
以下是我在lh-brackets中使用的功能 - &gt; http://code.google.com/p/lh-vim/source/browse/map-tools/trunk/autoload/lh/cpp/brackets.vim#32(注意:这是一个回调函数。它的结果将由lh-bracket框架解释)
<
在<
,>
或各种演员阵容之前展开为template
光标 #include
。< / p>
否则,在您的情况下,您应该使用inoreab
(:h inoreab
)(以及<buffer>
- &gt; :h :abbreviate-<buffer>
)