首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解:我缩写为<buffer> iff if:<left>

理解:我缩写为<buffer> iff if:<left>
EN

Stack Overflow用户
提问于 2016-04-18 19:09:12
回答 2查看 281关注 0票数 0

我输入了:autocmd FileType python :iabbrev <buffer> iff if:<left>,就像教程告诉的那样。

输出是

如果:

为什么在if和":“之间有一个空格?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-18 19:35:03

我想你是在输入iff之后才使用空格键吧?如果是这样的话,那是因为<left>。这是将光标放在左边,即f和":“之间。一旦空格键被接受,您的光标就在这两个字符之间,因此它在它们之间放置了一个空格。您可以在不使用<left>的情况下尝试该命令,并查看它是否能满足您的需要。如果不是,您将需要让我们确切地知道您希望我们能够帮助您的输出。如果您还没有看到,请参见::help abbrev

票数 1
EN

Stack Overflow用户

发布于 2016-04-18 22:11:55

缩写是由非关键字(例如.<cr><space>等)、<esc><c-]>触发的.仅键入iff并不足以扩展缩写。您输入了iff<space>,这足以扩展缩写,并将<space>放入您扩展的缩写中。您可以使用<c-]>来展开缩写,而无需插入任何额外的字符。例如iff<c-]>

Eatchar

然而,我发现使用<c-]>并不吸引人。Vim的文档为我们提供了另一种选择,即Eatchar函数。这个函数将使用一个匹配某个模式的键,而不是输出它。

代码语言:javascript
复制
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>或提供的模式上展开。把这些想象成轻量级的片段。

代码语言:javascript
复制
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>将适当地扩展。然而,像这样定义缩略语却是一团糟。

代码语言:javascript
复制
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>展开缩写。示例:

代码语言:javascript
复制
Railsabbrev iff if:<left>

代码片段

有时缩略语太简单或太难维护多行扩展。如果是这样的话,我建议你寻找一个好的代码插件。好的选择是UltiSnips病毒片段。查看他们关于如何展开和创建您自己的片段的文档。

更多帮助

代码语言:javascript
复制
:h Abbreviations
:helpg Eatchar
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36702371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档