29

最近、Vim をテキスト エディターとして使い始め、現在、独自のカスタマイズに取り組んでいます。

キーボード マッピングはほとんど何でもできると思いますが、当分の間、私はそれらを一種のスニペット機能としてほぼ独占的に使用しています。

たとえば、def{TAB}( :imap def{TAB} def ():<ESC>3ha) と入力すると、次のように展開されます。

def |(): # '|' represents the caret

これは期待どおりに機能しますが、「def」を含む単語を入力していて、それを展開することに興味がないときに、Vim が完全なコマンドを待つのは面倒です。

  • これを回避する方法、またはこの目的のためにこの機能をより効果的に使用する方法はありますか?
  • これに適した他の Vim 機能はありますか?

SnippetEmuをざっと見てみると、これが最良のオプションであり、最初に考えたよりもはるかに簡単にカスタマイズできるようです。

前の例を続けるには:

:Snippet def <{}>():

定義したら、 と入力してスニペットを展開できますdef{TAB}

4

6 に答える 6

35

Snipmate-texmateのように:) http://www.vim.org/scripts/script.php?script_id=2540

ビデオ: http: //vimeo.com/3535418

snippet def 
     """ ${1:docstring} """
     def ${2:name}:
         return ${3:value}
于 2009-05-18T20:18:37.960 に答える
14

vim の組み込み機能を使用する別の提案として (少し異なりますが):

:iabbrev def def(): #<LEFT><LEFT><LEFT><LEFT><LEFT>

これで、def の後にスペースまたはその他の非単語文字を入力すると、SnippetEmu の出力として指定したものと同じに展開されます (スペースは入力したスペースから取得され、補完をトリガーします)。

このアプローチは、:inoremap を使用して発生した「ラグ」の問題に悩まされることはなく、vim に組み込まれています。この機能の詳細については、 を参照してください:help abbrev

タブではなくスペースでトリガーされると不必要にトリガーされるのではないかと心配するかもしれませんが、一般に、vim はいつトリガーするかについて非常に賢明です。この問題は、特定のファイル タイプ (例: python) に対してのみ省略形を有効にすることでさらに軽減できます。

au filetype python :iabbrev ... etc

もちろん、Snip[ets] (Manager|Emu|Mate|.vim) も完璧なソリューションですが、代替手段 (特にそれらが組み込まれている場合) を知っておくと便利です。

于 2012-10-30T05:21:22.240 に答える
6

SnippetsEmu が必要なものに対して重すぎる、または野心的すぎる場合 (私にとってはそうでした)、ファイルタイプに基づいてスニペットを管理するプラグインを作成しました。スニペットを選択するときのタブ補完もあります! :)

ここから入手してください:snippets.vim

于 2008-11-01T08:21:41.973 に答える
6

UltiSnipsをインストールしました。UltiSnips を選ぶ理由を説明する良い記事があります: Why UltiSnips?

他のスニペット プラグインは使用していません。私は、フル機能を備えていて、より多くの Vim スキルを習得し、より高度なことをしたいという私に対応できるように思われるものを思い切って採用することにしました。

于 2012-03-29T06:06:49.340 に答える
5

SnippetsEmuは便利なスニペットプラグインです。

于 2008-08-19T08:13:01.020 に答える
4

MDCore で指摘されているように、SnippetsEmuは人気のある Vim スクリプトであり、それだけでなく、それ以上の機能を備えています。(キャレットを戻さずに) 展開のみが必要な場合は、標準:ab[breviate]コマンドを使用できます。

:ab[breviate] [<expr>] {lhs} {rhs}
        add abbreviation for {lhs} to {rhs}.  If {lhs} already
        existed it is replaced with the new {rhs}.  {rhs} may
        contain spaces.
        See |:map-<expr>| for the optional <expr> argument.
于 2008-08-28T13:48:47.707 に答える