2
У меня есть определенные пользователем команды VIM, которая называет ВИМ-Skript:Перейти к последнему положению курсора после выполнения команды в Vim
command! -complete=shellcmd -nargs=+ Shell call s:RunShellCommand(<q-args>)
, если я исполню его
:Shell echo "foo"
курсор перескакивает на первый строка файла. Но я хочу, чтобы он остался там же, где и был, прежде чем я вошел в команду.
Я попытался
command! -complete=shellcmd -nargs=+ Shell call s:RunShellCommand(<q-args>) | ''
, не похоже на работу.
RunShellCommand является
" 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
Я попытался это и команда ! -complete = shellcmd -nargs = + Shell let saved_winnr = winnr() | вызов s: RunShellCommand () | exec saved_winnr. 'wincmd w' Но, похоже, не работает. RunShellCommand открывает буфер нуля и обычно закрывает его снова. В принципе это должно быть так же просто, как добавить маркер или сохранить номер строки и вернуться в эту позицию, когда команда будет закончена. Но как я могу добавить маркер, который не перезаписывает возможные пользовательские маркеры. –
highsciguy
Откуда у RunShellCommand? Я подозреваю, что это может быть особенностью используемого вами плагина/скрипта или, иначе, лучше всего реализовать его как (новую). – sehe
RunShellCommand - это модифицированная версия скрипта vim из vim tips, см. Edit. – highsciguy