Это происходит потому, что обычно Vim переключается на альтернативный экран и работает там. После выхода Vim переключится обратно, и поэтому от сеанса Vim вы не увидите ничего, кроме результата команды, выполненной еще до запуска Vim.
Эта функция объяснена в :h xterm-screens
(ссылка)
Таким образом, вы в принципе не хотите этого и поэтому хотите отключить это. Вы можете сделать это, установив :set t_ti= t_te=
коды терминала, которые выполняют это, на пустые.
Собрав все это вместе, вы бы хотели запустить Vim так:
vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'
Мы сбрасываем эту 'more'
опцию, чтобы вы не увидели приглашение хит-ввода.
Кристиан Брабандт
источник
less
нужны пейджеры . Просто рассортируйте это как можно меньшеvim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!' | less
. Поначалу раскладка может быть испорчена (она у меня в терминале), но после нажатия <CL> все хорошо и модно.vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'
, есть только "быстрая вспышка", команда выхода с кодом 0, нет вывода. Я что-то пропустил?Мы также можем использовать
:redir
команду для перенаправления результатов команд vim в файлНапример,
Это перенаправляет вывод
scriptnames
в файл "vimout"источник
Я ценю ответ, предоставленный Кристианом Брабандтом, но думаю, что лучшим ответом было бы разделить команду quit с помощью другой команды -c, например:
Использование этого метода означает, что вы можете связать воедино несколько различных команд, а затем использовать последний 'q!' выйти из vim.
источник
В ситуациях, когда вам нужно, чтобы vim полностью загрузился, как если бы вы запустили его вручную, это работает:
Например, я хотел перенаправить вывод
:map
в файл из оболочки, но я хотел захватить отображение, которое vim-Airlines создает только после того, как оно отображает свою табулированную строку (строка вверху, показывающая все открытые имена буферов). это асинхронно, простое выполнение-c
перенаправления в файл не дает ему времени на сопоставления. Возможно, есть лучший способ, но это работает для меня, тем более, что я ужеupdatetime
установил100
(0,1 секунды), который влияет на то, как долго будет происходитьCursorHold
событие. По умолчанию vim устанавливает его на 4 секунды.источник