Подтвердить что ты не робот

Есть ли способ показать вывод последней команды в vim?

Когда я запускаю команду оболочки, она запрашивает ввод ENTER в конце, и как только вы делаете вывод, он скрыт. Есть ли способ увидеть это снова без запуска команды?

Также некоторые внутренние команды, такие как make, также запускают внешние команды, и они даже не останавливаются для ENTER, поэтому, если у меня есть ошибка в настройках моего компилятора, команда слишком быстро мигает на экране, чтобы увидеть ее. Как увидеть команду и ее выход? (quickfix пуст)

ОБНОВЛЕНИЕ

Вывод ОТДЕЛЬНО все еще там. по крайней мере, на терминале vim. если я напечатаю

:!cat

вывод предыдущей команды все еще существует. проблема в том, что: a) кажется слишком похожей на хак, я ищу правильный vim-способ b) он не работает в gui vim

4b9b3361

Ответ 1

просто введите:! или вы можете попробовать SingleCompile

Ответ 2

Установка vim в фоновый режим обычно работает для меня (нажмите Ctrl + Z).

Это покажет вам оболочку, с которой вы начали vim, и в моем случае я могу видеть вывод всех команд, которые я запускал в vim через ":! somecommand".

Это предполагает, что вы запускали vim из оболочки, а не gui one (gvim).

Ответ 3

Перед выполнением команды вы можете перенаправить вывод в файл, регистр, выбор, буфер обмена или переменную. Для меня перенаправление на регистр является наиболее практичным решением.

Чтобы начать перенаправление на регистр a, используйте

:redir @a

Затем вы запускаете свои команды, скажем

:!ls -l

И завершите перенаправление с помощью

:redir END

Что все, регистр a теперь содержит вывод от перенаправленных команд. Вы можете просмотреть его с помощью :reg a или поместить в буфер с помощью "ap, как обычно с регистром.

Прочитайте справку для :redir, чтобы узнать больше о различных способах перенаправления.


После нескольких месяцев я нашел файл справки, который может вас заинтересовать: messages.txt.

Хотя он неполный, он помогает много. Есть команда (новая для меня) под названием g<, которая отображает последнее сообщение, но, видимо, только сообщения Vim, например [No write since last change].

Во-первых, я предлагаю вам взглянуть в настройках 'shm' и попытаться сделать ваши команды более стойкими (появляется "Хит ENTER" чаще). Затем проверьте, помогает ли этот файл справки:-) Я не мог заставить его работать на 100%, но был большим успехом.

Ответ 4

Обычно я выхожу в оболочку с помощью :sh, и это покажет вам результат всех команд, которые были выполнены, и не перенаправил его на выход.

Просто закройте оболочку, и вы вернетесь в vim.

Ответ 5

Прокрутка вверх (протестировано на iTerm 2). Примечание. Это может не работать в зависимости от вашей конфигурации vim.

Пример: я собираюсь запустить !rspec --color % из моего vim.

enter image description here

Буфер заполнен выходом.

enter image description here

Теперь, после нажатия ENTER, вы можете прокручивать вверх, чтобы увидеть предыдущий вывод.

enter image description here

Ответ 6

Нашел это 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

Ответ 7

Возможно, ребята забывают о: 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 мог избавиться от нового текста после того, как я его выдержу или что-то еще,

Ответ 8

Команды типа make сохраняют свой вывод в /tmp/vsoMething. Кажется, что параметр errorfile установлен на файл, поддерживающий список fastfix/location. Если вы хотите, чтобы выход был где-то конкретным, см. makeef. Вы можете открыть текущий файл ошибок следующим образом:

:edit <C-r>=&errorfile<CR>

(К сожалению, это не работает для :grep.)


redir не должно быть утомительным. См. этот плагин для его упрощения. (У меня ftdetect и ftplugin скрипты для сделать выходной буфер не подкрепленным файлом.)


Вы видите вывод на терминале при вводе :!cat из-за вашего терминала, а не vim. Вы увидите то же самое, если используете Ctrl - z, который приостанавливает vim, поэтому vim активно не делает ничего.

Ответ 9

Почему я больше не использую :!, а что альтернатива

Я узнаю :! из выбранного в данный момент ответа (и я его поддержал). Он работает, в некотором смысле, что он показывает предыдущий экран.

Однако на днях я узнаю еще один совет по использованию :!! для повторного запуска последней команды (которая, кстати, очень полезна, когда вы находитесь в редакторе-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 - вернитесь).