回答:
500以上の略語を管理するための最良の方法はわかりません。おそらく長期的には、@ statoxが説明したように、スニペットを見てこの数を減らすことができます。
また、略語を自動補完したい場合は、次のコードを試すことができます。
augroup GetAbbrev
autocmd!
autocmd VimEnter * let s:abbrev_list = [] |
\ call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(s:abbrev_list, submatch(1))', 'gn')
augroup END
set completefunc=CompleteAbbrev
function! CompleteAbbrev(findstart, base)
if a:findstart
return searchpos('\<\k', 'bcnW', line('.'))[1] - 1
else
return filter(copy(s:abbrev_list), 'v:val =~ "^" . a:base')
endif
endfunction
それを使用するにC-x C-u
は、略語の始めの後でヒットする必要があります。
autocmd s:abbrev_list
は、すべての省略形を含む変数を設定します。
関数CompleteAbbrev()
は、カーソルの前の単語に基づいて候補のリストを返す必要があります。
'completefunc'
オプションの値は、あなたが打つときに呼び出す機能Vimを伝えますC-x C-u
。
オプションはバッファに対してローカルであるため、FileType
たとえばautocmdやイベントを使用するなど、別の種類のバッファで他の関数を引き続き使用できることに注意してください。
:h complete-functions
関数の動作の詳細については、を参照してください。
別の解決策は、シノニム補完を使用することです。から:h i_^x^t
:
*i_CTRL-X_CTRL-T*
CTRL-X CTRL-T Works as CTRL-X CTRL-K, but in a special way. It uses
the 'thesaurus' option instead of 'dictionary'. If a
match is found in the thesaurus file, all the
remaining words on the same line are included as
matches, even though they don't complete the word.
Thus a word can be completely replaced.
For an example, imagine the 'thesaurus' file has a
line like this:
angry furious mad enraged
Placing the cursor after the letters "ang" and typing
CTRL-X CTRL-T would complete the word "angry";
subsequent presses would change the word to "furious",
"mad" etc.
Other uses include translation between two languages,
or grouping API functions by keyword.
このソリューションを使用するには、3つのことを行う必要があります。
{lhs}
すべての略語を専用のファイルに書き込みます。/home/user/mysynonyms.txt
。そして、それらを同様のテーマでグループ化します。このファイルへのパスをオプションに追加します'thesaurus'
。
set thesaurus+=/home/user/mysynonyms.txt
C-x C-t
グループ内の任意の略語の名前の先頭の後にヒットします。
たとえば、次の略語があるとします。
iab cfa CFuncA
iab cfb CFuncB
iab cfc CFuncC
iab jfa JavaFuncA
iab jfb JavaFuncB
iab jfc JavaFuncC
iab pfa PhpFuncA
iab pfb PhpFuncB
iab pfc PhpFuncC
それらが属するプログラミング言語に従ってそれらをグループ化できます。
内部では/home/user/mysynonyms.txt
、次のように記述します。
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
これC-x C-t
で、略語の名前の直後(またはその最初)を押すと、Vimはポップアップメニューに同じ行にあるすべての略語を表示するはずです。
これは、次のようになります。
略語は、グループ化するために同じ文字で始める必要はないことに注意してください。それらは完全に異なる場合があります。同義語ファイルの同じ行にある限り、Vimはそれらすべてを表示します。
また、どのグループに略語を使用するかを決定するためにプログラミング言語を使用する必要はありません。考えている意味のある類似性/トピック/カテゴリに従ってグループ化できます。
したがって、特定の略語を忘れた場合は、カテゴリの最初の文字を入力しC-x C-t
、メニュー内で該当するものを押して選択できます。
編集:
内のすべての略語をダンプ/home/user/mysynonyms.txt
するには、次の3つのExコマンドを使用できます。
:let abbrev_list = []
:call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(abbrev_list, submatch(1))', 'gn')
:call writefile(abbrev_list, '/home/user/mysynonyms.txt')
Edit2:置換が必要ないため、関数が呼び出されたとき
にフラグを追加しました。その唯一の目的は、リストに略語が見つかるたびにその中に略語を追加することです。
しかし、多くの略語があるため、プロセスが無用に遅くなる可能性があるとは思いません。最初は、使用しているVimのバージョンがわからないので入れませんでした。バージョンが7.3.627より新しい場合は問題ありませんが、そうでない場合はフラグを削除する必要があります。n
substitute()
n
\vi?abbr\s+(\k+)
ますか?問題を再現できるかどうかを確認するために、省略形の抜粋とのリンクを教えていただけませんか。
n
、代替呼び出しにフラグを追加します(これを含めるように回答を編集しました)。で検索を実行し、vimrc
これをコピーして貼り付ける\v^\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}\zs\k+
と、略語が強調表示されますか?
wikiaのヒントでは、略語を選択的に表示する方法を提案しています。
あなたはあなたの略語のすべてをリストすることができます
:ab<CR>
(挿入モードの省略形のみをリストab
するにはiab
、置換)
そして、あなたは同じ接頭辞を持つすべての略語をリストすることができます
:ab prefix<CR>
これは略語の補完ほど理想的ではありませんが、既存の略語のリストをすばやく作成するには良い方法です。
このソリューションをより効率的にするには、ファイルタイプに固有の略語を作成することをお勧めします。たとえば、この省略形はJavaバッファーでのみ役立ちます。
iabbrev syso System.out.println("");
したがって、次のように定義することをお勧めします。
autocmd! FileType java :iabbrev <buffer> syso System.out.println("");
自動コマンド部分では、Javaバッファー内にいる場合にのみ略語を作成でき、<buffer>
オプションを指定すると、このバッファーからのみ略語にアクセスできます。
この方法で:iab
は、Javaバッファーにいる場合にのみ略語が表示されます。略語がたくさんある場合は、すべての略語を定義し、オートコマンドに関数を呼び出させるファイルタイプごとに関数を作成するのが面白いでしょう。何かのようなもの:
autocmd! FileType latex call CreateLatexAbbrev()
function! CreateLatexAbbrev()
iabbrev <buffer> something something else
" All the other latex abbreviations
endfunction
別の解決策は、キーワードのソースとして略語のリストを使用して、独自のオートコンプリート機能を作成することです。
最後に、私は「500を超える略語」にかなり感銘を受けていると言わざるを得ません。どの略語を使用しているかはわかりませんが、慣れていない場合はスニペットの概念を見てみるのも面白いでしょう。彼らと。これらはキーワードを入力してホットキーを押すことによってトリガーされるテンプレートであるため、省略形よりも柔軟性が高く、使用している省略形の数を減らすことができる場合があります。興味深い紹介については、こちらをご覧ください。
省略形をファイルタイプでグループ化してみませんか?
それらすべてを~/.vimrc
ファイルに含めるのではなく、それらを~/.vim
分割して、ランタイムディレクトリの適切な場所に配置します。これは、Unixのようなオペレーティングシステム上にあります。
たとえば、Markdownの省略形はファイル~/.vim/after/ftplugin/markdown.vim
にあり、Vim はMarkdownファイルタイププラグインのロード後にこれをチェックします。
巨大な.vimrc
ファイルがあってはいけません。を使用すると、柔軟性が向上し$VIMRUNTIME
ます。ランタイムパスはVimのヘルプシステムに記載されています:h 'runtimepath'
。
私は最初に、VimをテーマにしたアドベントカレンダーVimwaysの優れた記事.vimrcから.vimにこのことについて学びました。