Як вивести результат команд vim для оболонки


11

Скажімо, я перебуваю в оболонці ( bash) і хочу побачити вихід, який :scriptnamesби дав, але не хочу запускати vim або, можливо, я хочу передати це в інший файл.

Тому я страчу

vim +scriptnames

Що показує мені всі сценарії, але як я повторюю це у складі оболонки?

Відповіді:


10

Це трапляється, тому що зазвичай 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'параметр, щоб ви не бачили підказки про введення-введення.


1
Це ДУЖЕ, велике спасибі! Я насправді сумнівався, що це можливо.
hgiesel

Чи дає це можливість використовувати VimL як повноцінну мову скриптових систем, дозволяючи їй писати в stdout (для особливо мазохістських)?
shadowtalker

1
Одна з проблем із цим полягає в тому, що я не можу прокрутити термінал. (Якщо текст довший моєї термінальної висоти, я не бачу верхньої частини) Текст також зникає, якщо я відкрию vim, то виходжу.
FDinoff

@FDinoff Саме для цього є пейджери less. Просто перекладіть його на менш подібне vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!' | less. Макет, можливо, спочатку накрутився (це в моєму терміналі), але після натискання клавіші <CL> все приємно і денді.
hgiesel

Я не бачу виходу під час запуску vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!', є лише "швидкий спалах", вихід команди з кодом 0, вихід немає. Я щось пропускаю?
TrungDQ

3

Ми також можемо використовувати :redirкоманду для перенаправлення результатів команд vim у файл

Наприклад,

vim -c "redir! > vimout | scriptnames | redir END | q"

Це перенаправляє вихід scriptnamesу файл "vimout"


1

Я вдячний за відповідь, яку надав Крістіан Брабандт, але думаю, що кращою відповіддю було б відокремити команду quit, використовуючи іншу -c команду на зразок:

vim -c ':set t_ti= t_te= nomore' -c 'scriptnames' -c 'q!' 

Використання цього методу означає, що ви можете об'єднати кілька різних команд разом, а потім використати заключний 'q!' вийти з vim.


0

У ситуаціях, коли потрібно, щоб vim повністю завантажився так, як якщо б ви його запустили вручну, це працює:

vim -c "autocmd! CursorHold * <commands to run>"

Наприклад, я хотів переспрямувати вихід :mapфайлу з оболонки, але хотів зафіксувати відображення, яке створює vim-airline, тільки після того, як воно відобразить його табличний рядок (рядок вгорі показує всі відкриті імена буферів). це асинхронно, просто запуск -cпереадресації на файл не давав йому часу робити відображення. Може бути і кращий спосіб, але це працює для мене, тим більше, що я вже updatetimeвстановив 100(0,1 секунди), що впливає на те, як довго триватиме CursorHoldподія. За замовчуванням vim встановлює його на 4 секунди.

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.