だから、多くの質問:!
使用するより良いツールがあり、私は通常、彼らのようにプラグインの使用を避けることを好みます?私を悩ます機能が付いてくる。
Tim PopeのAbolish.vimは、あなたのニーズに最も近いプラグインです。しかし、より高度な展開で私はあまりにも不足するように感じる。私はあなたの過去のプラグインの経験についてはわかっていませんが、Timのプラグインは通常、うまく動作し、狭く集中しています。
iab
に大文字小文字を区別させる方法はありますか?私はセットとセットにSETの両方を修正するという意味ですか?
いいえ、私が認識しているネイティブな方法はありません。これを定期的に行い、より簡単な拡張ができれば、Abolishの使用をお勧めします。またはすべての方法を行って、スニペットプラグインを使用します。
iab
は、その前後に特殊文字または特定の文字がある場合に機能しますか?たとえば、私は2つのエントリを作成することができます。(幹部やexecがEXEC
それぞれEXEC(
に変更したいが、私は1行でこれを行うことができるかどうかの質問です。
この
はで行うことができます手の込んだ拡張これは、実際には略語だと
Rails.vimが何に非常に似て
あなた~/.vim/after/ftplugin/sql.vim
に以下を追加します。。
function! s:selective_expand(root, good, ...)
let [pat, extra; _] = a:0 ? a:000 : ['', '']
let c = nr2char(getchar(0))
if c == "" || c == "\t"
return a:good
elseif c =~ '\s'
return a:good . c
elseif pat != '' && c =~# pat
return a:good . extra
else
return a:root . c
endif
endfunction
function! s:paren_expand(root, good)
return s:selective_expand(a:root, a:good, '[(]', "()\<left>")
endfunction
function! s:sql_expand(root, ...)
let good = a:0 ? a:1 : toupper(a:root)
let good = substitute(good, '[\"|]', '\\&', "g")
let good = substitute(good, '<', '\\<lt>', "g")
let f = 'selective_expand'
let root = a:root
if root =~ '($' && (!a:0 || good !~ '($')
let root = substitute(root, '($', '', '')
let good = substitute(good, '($', '', '')
let f = 'paren_expand'
endif
let root = substitute(root, '[\"|]', '\\&', "g")
let root = substitute(root, '<', '\\<lt>', "g")
let roots = [root]
if root !~# '\u' && root =~# '^\l'
call add(roots, substitute(root, '^\l', '\u&', ''))
endif
for r in roots
execute "iabbr <buffer> " . r . " <c-r>=<SID>" . f . "(\"" . r . "\", \"" . good . "\")<cr>"
endfor
endfunction
command! -nargs=* Sqlabbrev call <SID>sql_expand(<f-args>)
今、あなたはあなたのに略語を作成することができますそのようなファイル:
Sqlabbrev select
Sqlabbrev join INNER\ JOIN
Sqlabbrev exec(
Sqlabbrev
がiabbrev
に似た2つの引数を取ります。しかし、わずかに異なる動作をします:
- 略語は常にバッファにローカルになります
- のみ1引数が、その後の拡張は、最初の引数と同じになりますが
<tab>
/<c-]>
を行います使用して、大文字
- 行われます続くスペースなしの拡張
- スペースの後ろのスペースを使用してスペースを拡張してスペースを追加します。
- 末尾が
(
の場合は、末尾がカーソルを括弧の中に置く
- スペースをエスケープするには、
\
または<space>
を使用する必要があります。
- 大文字が省略されていない場合、大文字の拡張が作成されます。例えば
Sqlabbrev select
は、select
とSelect
を展開します。
これは役立つかもしれません:https://vi.stackexchange.com/questions/12244/case-insensitive-abbreviations – Sundeep