我输入了:autocmd FileType python :iabbrev <buffer> iff if:<left>,就像教程告诉的那样。
输出是
如果:
为什么在if和":“之间有一个空格?
发布于 2016-04-18 19:35:03
我想你是在输入iff之后才使用空格键吧?如果是这样的话,那是因为<left>。这是将光标放在左边,即f和":“之间。一旦空格键被接受,您的光标就在这两个字符之间,因此它在它们之间放置了一个空格。您可以在不使用<left>的情况下尝试该命令,并查看它是否能满足您的需要。如果不是,您将需要让我们确切地知道您希望我们能够帮助您的输出。如果您还没有看到,请参见::help abbrev。
发布于 2016-04-18 22:11:55
缩写是由非关键字(例如.、<cr>、<space>等)、<esc>或<c-]>触发的.仅键入iff并不足以扩展缩写。您输入了iff<space>,这足以扩展缩写,并将<space>放入您扩展的缩写中。您可以使用<c-]>来展开缩写,而无需插入任何额外的字符。例如iff<c-]>
Eatchar
然而,我发现使用<c-]>并不吸引人。Vim的文档为我们提供了另一种选择,即Eatchar函数。这个函数将使用一个匹配某个模式的键,而不是输出它。
function! Eatchar(pat)
let c = nr2char(getchar(0))
return (c =~ a:pat) ? '' : c
endfunction
iabbr <buffer> iff if:<left><c-r>=Eatchar('\s')<cr>Rails.vim类缩略语
您可以更进一步,使用Rails.vim-esque缩写,这些缩写只在<tab>或提供的模式上展开。把这些想象成轻量级的片段。
function! RailsExpand(root, good, ...)
let c = nr2char(getchar(0))
if c == "" || c =~ (a:0 ? a:1 : "\t")
return a:good
else
return a:root . c
endif
endfunction
iabbr <buffer> iff <c-r>=RailsExpand('iff', "if:\<left>")<cr>现在,iff<tab>将适当地扩展。然而,像这样定义缩略语却是一团糟。
function! Railsabbrev(root, good)
let good = substitute(a:good, '[\"|]', '\\&', "g")
let good = substitute(good, '<', '\\<lt>', "g")
let root = substitute(a:root, '[\"|]', '\\&', "g")
let root = substitute(root, '<', '\\<lt>', "g")
execute "iabbr <buffer> " . a:root . " <c-r>=RailsExpand(\"" . root . "\", \"" . good . "\")<cr>"
endfunction
command! -nargs=* Railsabbrev call Railsabbrev(<f-args>)现在,您可以使用:Railsabbrev来定义<tab>展开缩写。示例:
Railsabbrev iff if:<left>代码片段
有时缩略语太简单或太难维护多行扩展。如果是这样的话,我建议你寻找一个好的代码插件。好的选择是UltiSnips或病毒片段。查看他们关于如何展开和创建您自己的片段的文档。
更多帮助
:h Abbreviations
:helpg Eatcharhttps://stackoverflow.com/questions/36702371
复制相似问题