2016-03-25 7 views
2

Ich schrieb eine Funktion in Vim, um Text in "Einfügen" -Modus einzufügen. Wenn ich den Einfügemodus verlasse, verlässt das Skript auch den Einfügemodus (set nopaste). Deshalb habe ich den Autocommand InsertLeave benutzt.
Das Problem ist, dass der Befehl "set paste" nur beim ersten Aufruf der Funktion funktioniert. Wenn ich es noch einmal anrufen möchte, muss ich vim neu starten.Vim Funktion funktioniert nur beim ersten Mal

Dies ist die vim-Funktion:

function Paste_from_clipboard() 
    execute "normal! :set paste\<CR>\<Esc>o" 
    execute "startinsert" 
    autocmd InsertLeave * execute "normal! :set nopaste\<CR>" 
endfunction 

map <Leader>p :call Paste_from_clipboard()<CR> 

Was habe ich falsch gemacht?

Antwort

5

Ich glaube, Sie verstehen, wie VimScript funktioniert. Jede Zeile (sei es auf .vimrc, ein Plugin, eine Syntaxdatei) ist nur ein ex-Befehl, wobei nicht gestartet wird : wird nicht benötigt. Also, wenn Sie schreiben:

execute "normal! :set paste\<CR>\<Esc>o" 

Sie grundsätzlich einen ex-Befehl aufrufen (:exec), die eine andere ex Befehl aufruft (:normal), die dann den Normalmodus, was simuliert? Um noch einen ex-Befehl (:set) aufzurufen und mit Schlüsselcodes auszuführen. Warum? Sie können einfach den letzten ex-Befehl direkt:

set paste 

Dies auch in Ihrem Auto-Befehl geschieht. Es ist auch wichtig, dass Sie beachten, dass Sie einen automatischen Befehl jedes Mal neu erstellen, wenn Sie Ihre -Funktion aufrufen. Eine einfache Lösung ist dann, Ihre zusätzlichen Befehle zu entfernen und den Auto-Befehl außerhalb der Funktion zu verschieben, so dass es nur einmal erstellt wird. Die Ausführung geschieht, dann jedes Mal das Ereignis ausgelöst wird (ohne ein anderes Ereignis Zuhörer immer wieder geschaffen.

function Paste_from_clipboard() 
    set paste 
    startinsert 
endfunction 

autocmd InsertLeave * set nopaste 

map <Leader>p :call Paste_from_clipboard()<CR> 

Überprüfen Sie die :h pt für die pastetoggle Option. Es könnte eine Alternative zu dem, was Sie tun

+0

Vielen Dank, ich verstehe wirklich nicht, wie VimScript funktioniert. – mamiu