Підключення буфера до зовнішньої команди у Vim


92

Я якийсь новачок Vim. Я хотів би надіслати вміст поточного буфера на stdin зовнішньої команди (скажімо, пошта). Моя остання мета - встановити ярлик для швидкої надсилання електронної пошти з поточного буфера Vim. Я припускаю, що це має бути дрібницею, але я не міг знайти спосіб відправити буфер Vim зовнішній команді. Заздалегідь спасибі.


Пов’язані запитання щодо надання виділеного тексту як STDINкоманд оболонки: Труба для оболонки та отримання виводу в інформаційному рядку та Заміна вибраного оригінального тексту на вихідний
— user1129682

Відповіді:


130

Ви можете використовувати :w !cmdдля запису поточного буфера в stdin зовнішньої команди. Від :help :w_c:

: [діапазон] w [обряд] [++ opt]! {cmd}

Виконайте за {cmd}допомогою [range]рядків як стандартне введення (зверніть увагу на пробіл перед '!'). {cmd}виконується, як і ":!{cmd}", будь- '!'яка замінюється попередньою командою |:!|.

Пов’язана команда, :%!cmdяка робить те саме, а потім замінює поточний буфер результатом команди. Тому :%!sortбуде викликати зовнішню команду сортування для сортування поточного буфера на місці.


6
Це корисно для форматування json, наприклад: :'<,'>!python -mjson.toolабо:%!python -mjson.tool
— TrinitronX

1
Для форматування go, використовуйте :%!gofmtбез останньої %, оскільки це призведе до використання збереженої версії (яка може відрізнятися від поточного буфера)
— thomasrutter

Чи існує спосіб замінити поточний буфер командою, що виводиться, лише після успіху? Якщо команда повертає ненульове значення, чи не замінює буфер?
— thomasrutter

@thomasrutter, якщо буфер замінюється повідомленням про помилку замість передбачуваного виводу, ти можеш просто натиснути uна кнопку скасування
— törzsmókus

1

Ось приклад, як відправити поточний буфер на зовнішній stdin з командного рядка:

vim -es +"w >> /dev/stdout" -cq! /etc/hosts

Це корисно для сценаріїв.

Щоб отримати додаткові хитрощі з командного рядка, перевірте:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.