Ich habe einen Benutzer definiert Vim-Befehl, der einen Vim-Skript aufruft:zur letzten Cursorposition nach dem Befehl in Vim
command! -complete=shellcmd -nargs=+ Shell call s:RunShellCommand(<q-args>)
wenn ich es ausführen
:Shell echo "foo"
springt der Cursor auf den ersten Zeile der Datei. Aber ich möchte, dass es an der Stelle bleibt, wo es war, bevor ich den Befehl eingegeben habe.
Ich versuchte
command! -complete=shellcmd -nargs=+ Shell call s:RunShellCommand(<q-args>) | ''
, die nicht zu funktionieren scheint.
Die RunShellCommand ist
" Shell command with output in vim scratch buffer
function! s:RunShellCommand(cmdline)
let isfirst = 1
let words = []
for word in split(a:cmdline)
if isfirst
let isfirst = 0 " don't change first word (shell command)
else
if word[0] =~ '\v[%#<]'
let word = expand(word)
endif
let word = shellescape(word, 1)
endif
call add(words, word)
endfor
let expanded_cmdline = join(words)
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
call setline(1, 'You entered: ' . a:cmdline)
call setline(2, 'Expanded to: ' . expanded_cmdline)
call append(line('$'), substitute(getline(2), '.', '=', 'g'))
silent execute '$read !'. expanded_cmdline
" close scratch buffer if successfull
if v:shell_error == 0
q
endif
1
endfunction
Ich versuchte dies und Befehl ! -complete = shellcmd -nargs = + Shell let saved_winnr = winnr() | Rufen Sie s: RunShellCommand () | exec saved_winnr. 'wincmd w' Aber keiner scheint zu funktionieren. Der RunShellCommand öffnet den Scratch-Puffer und schließt ihn normalerweise wieder. Im Prinzip sollte es so einfach sein wie das Hinzufügen eines Markers oder das Speichern der Zeilennummer und das Zurückkehren zu dieser Position, wenn der Befehl beendet ist. Aber wie kann ich einen Marker hinzufügen, der mögliche Benutzermarker nicht überschreibt? –
highsciguy
Woher kommt RunShellCommand? Ich vermute, dass dies eine Funktion des verwendeten Plugins/Skripts sein könnte, ansonsten sollte es am besten als (neues) Feature implementiert werden. – sehe
Der RunShellCommand ist eine modifizierte Version eines vim-Skripts von vim tips, siehe Bearbeiten. – highsciguy