Підключення буфера до зовнішньої команди у 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.