Ответ 1
просто введите:! или вы можете попробовать SingleCompile
Когда я запускаю команду оболочки, она запрашивает ввод ENTER в конце, и как только вы делаете вывод, он скрыт. Есть ли способ увидеть это снова без запуска команды?
Также некоторые внутренние команды, такие как make
, также запускают внешние команды, и они даже не останавливаются для ENTER, поэтому, если у меня есть ошибка в настройках моего компилятора, команда слишком быстро мигает на экране, чтобы увидеть ее. Как увидеть команду и ее выход? (quickfix пуст)
ОБНОВЛЕНИЕ
Вывод ОТДЕЛЬНО все еще там. по крайней мере, на терминале vim. если я напечатаю
:!cat
вывод предыдущей команды все еще существует. проблема в том, что: a) кажется слишком похожей на хак, я ищу правильный vim-способ b) он не работает в gui vim
просто введите:! или вы можете попробовать SingleCompile
Установка vim в фоновый режим обычно работает для меня (нажмите Ctrl + Z).
Это покажет вам оболочку, с которой вы начали vim, и в моем случае я могу видеть вывод всех команд, которые я запускал в vim через ":! somecommand".
Это предполагает, что вы запускали vim из оболочки, а не gui one (gvim).
Перед выполнением команды вы можете перенаправить вывод в файл, регистр, выбор, буфер обмена или переменную. Для меня перенаправление на регистр является наиболее практичным решением.
Чтобы начать перенаправление на регистр a
, используйте
:redir @a
Затем вы запускаете свои команды, скажем
:!ls -l
И завершите перенаправление с помощью
:redir END
Что все, регистр a
теперь содержит вывод от перенаправленных команд. Вы можете просмотреть его с помощью :reg a
или поместить в буфер с помощью "ap
, как обычно с регистром.
Прочитайте справку для :redir
, чтобы узнать больше о различных способах перенаправления.
После нескольких месяцев я нашел файл справки, который может вас заинтересовать: messages.txt.
Хотя он неполный, он помогает много. Есть команда (новая для меня) под названием g<
, которая отображает последнее сообщение, но, видимо, только сообщения Vim, например [No write since last change]
.
Во-первых, я предлагаю вам взглянуть в настройках 'shm'
и попытаться сделать ваши команды более стойкими (появляется "Хит ENTER" чаще). Затем проверьте, помогает ли этот файл справки:-) Я не мог заставить его работать на 100%, но был большим успехом.
Обычно я выхожу в оболочку с помощью :sh
, и это покажет вам результат всех команд, которые были выполнены, и не перенаправил его на выход.
Просто закройте оболочку, и вы вернетесь в vim.
Прокрутка вверх (протестировано на iTerm 2). Примечание. Это может не работать в зависимости от вашей конфигурации vim.
Пример: я собираюсь запустить !rspec --color %
из моего vim.
Буфер заполнен выходом.
Теперь, после нажатия ENTER
, вы можете прокручивать вверх, чтобы увидеть предыдущий вывод.
Нашел это script - откроет новую вкладку
function! s:ExecuteInShell(command)
let command = join(map(split(a:command), 'expand(v:val)'))
let winnr = bufwinnr('^' . command . '$')
silent! execute winnr < 0 ? 'botright new ' . fnameescape(command) : winnr . 'wincmd w'
setlocal buftype=nowrite bufhidden=wipe nobuflisted noswapfile nowrap number
echo 'Execute ' . command . '...'
silent! execute 'silent %!'. command
silent! execute 'resize ' . line('$')
silent! redraw
silent! execute 'au BufUnload <buffer> execute bufwinnr(' . bufnr('#') . ') . ''wincmd w'''
silent! execute 'nnoremap <silent> <buffer> <LocalLeader>r :call <SID>ExecuteInShell(''' . command . ''')<CR>'
echo 'Shell command ' . command . ' executed.'
endfunction
command! -complete=shellcmd -nargs=+ Shell call s:ExecuteInShell(<q-args>)
Вставьте его в свой .vimrc Он также работает на gui vim..
Пример использования -: Shell make
Возможно, ребята забывают о: r
r !ls ~/
Поместите это, где мой курсор:
bug_72440.html
bug_72440.vim
Desktop
dmtools
Docear
docear.sh
Documents
Downloads
examples.desktop
index.html
linux_home
Music
Pictures
Public
Templates
Простой u мог избавиться от нового текста после того, как я его выдержу или что-то еще,
Команды типа make
сохраняют свой вывод в /tmp/vsoMething
. Кажется, что параметр errorfile
установлен на файл, поддерживающий список fastfix/location. Если вы хотите, чтобы выход был где-то конкретным, см. makeef
. Вы можете открыть текущий файл ошибок следующим образом:
:edit <C-r>=&errorfile<CR>
(К сожалению, это не работает для :grep
.)
redir
не должно быть утомительным. См. этот плагин для его упрощения. (У меня ftdetect и ftplugin скрипты для сделать выходной буфер не подкрепленным файлом.)
Вы видите вывод на терминале при вводе :!cat
из-за вашего терминала, а не vim. Вы увидите то же самое, если используете Ctrl - z, который приостанавливает vim, поэтому vim активно не делает ничего.
:!
, а что альтернативаЯ узнаю :!
из выбранного в данный момент ответа (и я его поддержал). Он работает, в некотором смысле, что он показывает предыдущий экран.
Однако на днях я узнаю еще один совет по использованию :!!
для повторного запуска последней команды (которая, кстати, очень полезна, когда вы находитесь в редакторе-test-edit-test -... цикл). И тогда я понимаю, что использование :!
имеет какой-то побочный эффект, забывая последнюю команду, так что будущее :!!
не будет работать. Это не круто.
Я не понимаю этого, пока не погрузится в документацию vim.
:! {cmd} Выполнить {cmd} с помощью оболочки.
Любые '!' в {cmd} заменяется предыдущим внешняя команда
Внезапно все начинает иметь смысл. Давайте рассмотрим его в следующей последовательности:
:!make foo bar baz tons of parameters
и увидите его вывод, позже вернитесь к vim.:!!
, второй !
будет заменен предыдущей внешней командой, поэтому вы снова запустите make foo bar baz tons of parameters
.:!
, vim по-прежнему будет рассматривать его как "запустить (новую) внешнюю команду", просто команда окажется ПУСТОЙ. Таким образом, это эквивалентно тому, что вы вводите пустую команду (т.е. Нажимаете ENTER один раз внутри нормальной оболочки). Переключив экран в оболочку, вы получите шанс увидеть предыдущий экран. Это он.:!!
, vim повторит предыдущую команду, но на этот раз предыдущая команда является пустой. Вот почему ваш vim теряет память для make foo bar baz tons of parameters
, так что в следующий раз, когда вы захотите сделать, вам придется набирать их снова.Итак, следующий вопрос будет, есть ли какая-нибудь другая команда "pure vim", чтобы показывать только предыдущий вывод оболочки без испорчения последней памяти команд? Я не знаю. Но теперь я соглашаюсь использовать CTRL + Z, чтобы принести vim в фоновый режим, поэтому отображает консоль консоли с предыдущим выходом команды, а затем я набираю fg
и ENTER для переключения обратно в vim. FWIW, решение CTRL+Z
действительно нуждается в одном меньшем шаге, чем решение :!
(для которого требуется shift + ; shift + 1 ENTER, а ENTER - вернитесь).