2016-04-26 17 views
0

Ich fand eine großartige Tastenkombination, die über sublimes Codescompletion springt, indem Sie Enter hier drücken, ist der Link: quora. Mein Code in meiner Keymap-Datei ist:Wie man eine Schlüsselbindung macht, die über die Codevervollständigung in erhaben springt, außer es ist ein {} oder []

// BEGIN keymaps for skipping to the end of ") and ] code compeletion 
{ "keys": ["enter"], "command": "move", "args": {"by": "characters", "forward": true}, "context": 
    [ 
     { "key": "following_text", "operator": "regex_contains", "operand": "^[)'\"\\]]", "match_all": true }, 
     { "key": "auto_complete_visible", "operator": "equal", "operand": false } 
    ] 
}, 
// END keymaps for skipping to the end of ") and ] code compeletion 

und es funktioniert definitiv, wie ich möchte ... die meiste Zeit. Zum Beispiel, wenn ich in einigen javascript bin eingeben:

function(p1, p2|)| 
hitting enter..^.^ 

und ich drücken Sie die Eingabetaste, wenn der Cursor auf dem ersten Karotte ist, dann wird es auf die zweite Karotte springen über das ist, was ich will. Es gibt jedoch noch einen anderen Fall, in dem Sie geöffnete, eckige Klammern in einer erhabenen Einstellungsdatei sagen.

[|]| 
.^.^ 

nun wegen des Keymapping der Cursor springt über die rechte eckige Klammer, wenn sie in Wirklichkeit, was wollen Sie ist wie eine neue Zeile einzufügen:

[| 
.^ 
    | 
....^ 
] 

und die Karotte aus dem ersten Schritt die zweite Karotte, genau wie das Verhalten, das passiert, wenn Sie eine JavaScript-Funktion zu erstellen:

function myFunction(){| 
    | <-- cursor tabbed over 
} <--curly on bottom 

Mein Problem ist, ich regex nicht wirklich verstehen, die gut noch, oder wie sie verwendet werden i n Kombination mit Keymaps in Sublime. Wirklich, was ich brauche, um herauszufinden, (glaube ich) ist wie eine Art bedingter in die keymap einzufügen, die im Grunde nur prüft:

if (next char is a ] and the char before it is a [) 
then don't do any completion hoping 
else do exactly like the keymap is already set up to do 

Wie würde ich mich über das tun dies? Danke für Ihre Hilfe :)

Antwort

0

Wenn ich Ihre Frage richtig verstehe, möchten Sie die Funktionalität zu arbeiten, wenn der Cursor in Klammern () ist, aber nicht, wenn in eckigen Klammern [].

{ "key": "following_text", "operator": "regex_contains", "operand": "^[)'\"\\]]", "match_all": true }, 

dazu: Wenn das der Fall ist, einfach diese Zeile ändern

{ "key": "following_text", "operator": "regex_contains", "operand": "^[)'\"\]", "match_all": true }, 

Alles, was ich war, die "operand" von diesem

"^[)'\"\\]]" 

zu diesem

ändern tat
"^[)'\"\]" 

durch Entfernen

\] 
+0

Hey, danke für die Antwort. Es ist eigentlich nicht so, dass ich möchte, dass es mit Klammern oder Klammern arbeitet. Es ist eher wie für eckige Klammern, wie kann ich es funktionieren lassen (das ist Sprung über die Klammer), wenn die Klammern nicht direkt nebeneinander stehen: einige code |] 'aber nicht funktionieren (das ist ein newline öffnen) wenn die klammern direkt nebeneinander stehen wie:' [|] '. Das vertikale Rohr soll meinen Cursor darstellen. Macht das mehr Sinn? – mbigras

+0

@mbigras OK, ich verstehe jetzt. Ich werde sehen, was ich daraus machen kann ... – MattDMo

+0

Hey Matt, ich frage mich nur, ob du die Chance hast noch einen Blick darauf zu werfen. Ich versuche immer noch, es selbst herauszufinden, und ich würde es definitiv zu schätzen wissen, wenn du einen Weg gefunden hast :) – mbigras