2016-06-19 4 views
1

Ich schreibe ein Plugin, das dem Benutzer ein Formular präsentiert. Alles funktioniert gut, aber für den vollen Erfolg wäre es großartig, wenn ich die Bearbeitung der ersten zwei präsentierten Spalten blockieren könnte. Grundsätzlich entspricht das: <Nop> wenn col(".") < X, aber ich weiß nicht, wie man an jede im Einfügemodus gedrückte Taste anlegt. Ist meine Richtung richtig, wie an die Tastenanschläge anschließen?Blockbearbeitung von Text vor gegebener Spalte in Vim

Mehr, möchte ich auch die Bearbeitung von ausgewählten Zeilen von ersten 7 Zeilen blockieren.

Antwort

1

können Sie die Option modifiable in einem CursorMoved automatischen Befehl, zum Beispiel:

au CursorMoved * call CheckCursorPos() 

function! CheckCursorPos() 
    " This code has to be improved, it's just an example: 
    if col('.') <= 2 
     set nomodifiable 
    else 
     set modifiable 
    endif 
endf 

Sie mehr hinzufügen können innerhalb der Funktion komplexer Tests (die 7 ersten Zeilen zum Beispiel zu handhaben).

Um es Sie müssen auch den CursorMovedI automatischen Befehl zu Ihrem Geschmack handhaben machen abzuschließen, da sonst die Ausgabe möglich sein wird, wirft den Bearbeitungsmodus (zum Beispiel, wenn Sie i auf der 4. Spalte drücken, die veränderbar ist, dann die gehen zurück Anfang der Zeile, die Ausgabe wird möglich sein)

+0

Kann die Nachricht "E21: Kann keine Änderungen vornehmen, 'modifizierbar' ist aus" irgendwie zum Schweigen gebracht werden? –