2017-12-16 4 views
1

Ich schreibe ein SQL Datenbank-Skript, und ich verwende iab zu Großbuchstaben spezielle Wörter wie DATABASE oder TABLE. Ich habe drei Fragen:Gibt es eine Möglichkeit, in vim Abkürzungen zu verwenden, die Sonderzeichen ignorieren?

  1. Gibt es ein besseres Werkzeug zu verwenden? Ich bevorzuge es, ein Plug-in zu verwenden, da es in der Regel Funktionen gibt, die mich stören.
  2. Gibt es eine Möglichkeit, iab Groß-und Kleinschreibung zu beachten? Ich meine, dass es sowohl set als auch Set in SET korrigieren wird?
  3. Gibt es eine Möglichkeit, iab arbeiten zu lassen, wenn bestimmte oder bestimmte Zeichen dem Wort folgen/vorangehen? Zum Beispiel möchte ich exec und exec( in EXEC und EXEC( ändern. Ich kann zwei Einträge erstellen, aber die Frage ist, ob ich das in einer einzigen Zeile machen kann.
+1

könnte dies helfen: https://vi.stackexchange.com/questions/12244/case-insensitive-abkurriations – Sundeep

Antwort

0

Bessere Möglichkeiten: Nein, kurz ein Plugins kann ich nicht sehen, was sonst als Abkürzungen in diesem Zusammenhang als nützlich wäre. Ich bemerke, dass sql_iabbr.vim zumindest leicht zu lesen ist und nicht viel in der Art von versteckten Fallen enthält. Es ist im Wesentlichen eine ganze Reihe von diesem:

inoreabbr <silent> <buffer> select <C-R>=SqlIab_ReplaceConditionally('select', 'SELECT')<CR> 

mit der folgenden Funktion:

function! SqlIab_ReplaceConditionally(original, replacement) 
    " only replace outside of comments or strings (which map to constant) 
    let elesyn = synIDtrans(synID(line("."), col(".") - 1, 0)) 
    if elesyn != hlID('Comment') && elesyn != hlID('Constant') 
    let word = a:replacement 
    else 
    let word = a:original 
    endif 

    let g:UndoBuffer = a:original 
    return word 
endfunction 

Ich denke, es auch wert ist Abolish Hinweis auf für leistungsfähigere Abkürzungen.

Groß- und Kleinschreibung: wieder, ich denke, die Antwort ist ‚Nein‘ (basierend auf eine einigermaßen gründliche Überprüfung von the help

Special/bestimmten Zeichen:. sorry, wenn Sie, dass in einer Abkürzung getan brauchen ich glaube, du bist wieder kein Glück

0

so viele Fragen:?

gibt es ein besseres Werkzeug zu benutzen, ich ziehe in der Regel mit einem Plugin, wie sie zu vermeiden kommen mit Funktionalität, die mich stört.

Tim Popes Abolish.vim ist das nächstgelegene Plugin, das Ihren Bedürfnissen entspricht. Aber mit den fortgeschritteneren Erweiterungen habe ich das Gefühl, dass es auch zu kurz kommen wird. Ich bin mir nicht sicher über deine bisherigen Plugin-Erfahrungen, aber Tims Plugins verhalten sich normalerweise gut und sind eng fokussiert.

Gibt es eine Möglichkeit, iab Groß-und Kleinschreibung zu beachten? Ich meine, dass es sowohl Set als auch Set in SET korrigiert?

Nein, ich kenne keine einheimische Methode. Ich würde empfehlen Abolish zu verwenden, wenn Sie dies regelmäßig tun und einfachere Erweiterungen haben. Oder gehen Sie den ganzen Weg und verwenden Sie ein Snippet-Plugin.

Gibt es eine Möglichkeit, iab arbeiten zu lassen, wenn bestimmte oder bestimmte Zeichen dem Wort folgen/vorangehen?Zum Beispiel möchte ich exec und exec (geändert in EXEC und EXEC( bzw. werden. Ich zwei Einträge erstellen kann, aber die Frage ist, ob ich das in einer einzigen Zeile tun.

Dies kann mit einem getan werden . Expansion schicker es ist in der Tat sehr ähnlich, was Rails.vim daraus macht Abkürzungen ist

Fügen Sie den folgenden Code zu Ihrem ~/.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>) 

Jetzt können Sie Abkürzungen in IhremerstellenDatei wie folgt:

Sqlabbrev select 
Sqlabbrev join INNER\ JOIN 
Sqlabbrev exec(

Sqlabbrev Takes 2 Argumente ähnlich wie iabbrev. Allerdings verhält sich etwas anders:

  • Abkürzungen werden immer lokal auf den Puffer
  • Wenn nur 1 Argument dann wird die Erweiterung das gleiche wie das erste Argument sein, aber aus Groß
  • Mit <tab>/<c-]> wird das machen Erweiterung ohne folgende Leerzeichen
  • Abkürzung von Leerzeichen verwenden wird erweitert und Raum
  • hinzufügen Wenn die Abkürzung mit ( endet dann erweitern mit Beendigung der () und setzen Sie den Cursor in den Paren
  • Sie müssen Räume über \ oder <space> entkommen. Kann Tastencodes verwenden
  • Wird einige Fallerweiterungen erstellen, wenn kein Großbuchstabe in Abkürzung gefunden wird. z.B. Sqlabbrev select wird erweitert select und Select.
Verwandte Themen