挿入略語のバックスペース


8

機能させるには、略語を空白で区切る必要があります。たとえば、私が持っているiab fo FOOBAR場合、タイプしwhatfoても省略形はトリガーされません。これにはいくつかの明らかな賢明な理由があります。

ただし、iabをトリガーしてから戻ってスペースを削除しなくても、接尾辞として使用できる略語が必要です。これは可能ですか?例えば、iab fo <backspace>FOOBAR


次のコードはあなたが望むものを生成しますか?vpaste.net/IfU1j
saginaw

@saginawうん、素晴らしい-答えとしてそれを投稿すればそれはあなた次第だ。
goldilocks 2016

回答:


8

あなたはあなたのvimrcの中に書くことができます: iab fo <BS>FOOBAR

<BS> バックスペースキーに使用する表記です。

特別なキー名の詳細については、以下を参照してください。

:help key-notation

1
この場合、「単純な方法」はうまくいきませんでした。実際のサフィックスはs [7:0]の数bなどをいじってカスタマイズする必要があると思います。
goldilocks 2016

@delicateLatticeworkFeverその通りです、私はそれについて考えていませんでした。この特定のケースでは、おそらく交換するbeしてBE十分だろう。しかし、それが失敗する他のケースがあるかもしれません、私は知りません。いずれにせよ、最初のバージョンはほとんどの場合うまくいくはずです。
サギノー

@delicateLatticeworkFever私の答えをもう一度読んで、それが過度に複雑であることに気づきました。おそらく何かiab fo <BS>foobarで十分でした。ご不便をおかけして申し訳ございませんが、@ djjcastの答えを正解としてください。現在のところ、回答を削除することはできませんが、削除できると削除できます。本当に申し訳ありませんが、私は略語に慣れていません。
saginaw 2016

ちょっと<BS>だけでした。私はそのようなことを試したと誓いますが、すべての制御文字を知っているわけではないので、私は<backspace>何かを使用した可能性があります。
goldilocks 2016

1
@delicateLatticework私が理解するフィーバー、問題ありません。あなたはすべての特殊キー名を表示したい場合は、ここでそれらを読むことができます::help key-notation
サギノー

4

挿入モードで押すだけですCtrl]。これにより、スペースを入力せずに略語が展開されます。


あなたは質問を読み間違えました。:私は、最終的な結果のようなものになりたいX(FOOBAR)ではありませんX( FOOBAR。Ctrl-]を使用すると、末尾のスペースが削除さます。私は略語を使用できるようにする必要があります- これは起動する最初の空白にも依存します -しかし、それを前の単語と連結させます(これは「サフィックス」が意味することです)。
ゴルディロックス2016

ああ、あなたはスニペットのプラグインが欲しい...
クリスチャンブラバンド

これは定義された何かで実行できると思います${1}FOOBAR-それは良い答えです。これを変更したい場合:/または別の回答を追加します。
goldilocks 2016

私は個人的にスニペットプラグインを知らないので、これを真剣に答えにすることはできません。
クリスチャンブラバンド2016

4

別の方法として、以下は、どこにでも展開される略語を定義および展開する方法です。

let s:anywhere_abbreviations = {
    \ 'fo': 'FOOBAR',
    \ 'ab': 'ABBREVIATION',
\ }

function! s:MaybeExpandAbbreviation(trigger)
    for key in keys(s:anywhere_abbreviations)
        if matchstr(getline('.'), repeat('.', strchars(key)) . '\%' . col('.') . 'c') ==# key
            return repeat("\<BS>", strchars(key)) . s:anywhere_abbreviations[key] . a:trigger
        endif
    endfor
    return "\<C-]>" . a:trigger
endfunction

inoremap <expr> <Space> <SID>MaybeExpandAbbreviation("\<Space>")

どこかに展開する必要がある略語をs:anywhere_abbreviations辞書に追加するだけです。このs:MaybeExpandAbbreviation()関数は、トリガーキーが押されたときに略語の一致を検索して展開します- <Space>「anywhere abbreviations」の展開をトリガーするためにマップされます。

上記のs:anywhere_abbreviations辞書では、タイピングwhatfo<Space>はに展開されwhatFOOBARます。


2

これから出てきた最も単純な2つの答えを要約すると:

  1. バックスペースは省略形で直接使用できます:help keycodes。さまざまな特殊文字がに記載されています。したがって、たとえば:

    :iab cdt <BS>cedental
    

    入力trans cdtして取得できますtranscendental

  2. 何年も使用して以来、特に恥ずかしいのですが、共通のsnipMateプラグインを使用すると、パラメーターを前に置くことができます。

     snippet cdt
         ${1}cendental ${2}
    

    タイピングを可能にしcdtTabに拡大するcendentalと、あなたが入力できるように、前にカーソルを置きtrans、その後、ヒットTab次の単語の先頭に移動し、再び。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.