Як я можу передати висновок команди оболонки в новий буфер у Vim? Наступне очевидно не буде працювати, але ви можете бачити, що я отримую:
:!echo % | :newtab
Як я можу передати висновок команди оболонки в новий буфер у Vim? Наступне очевидно не буде працювати, але ви можете бачити, що я отримую:
:!echo % | :newtab
Відповіді:
Ви не можете передавати висновок команди оболонки в команду, яка створює новий буфер, але ви можете створити новий буфер і прочитати висновок команди оболонки в цей буфер одним записом у командному рядку Vim. Працюючим варіантом вашого прикладу буде
:tabnew | r !echo <c-r>=bufname("#")<cr>
Зауважте, що символ труби в цьому випадку є роздільником між командами Vim ex, а не трубою оболонки. Дивись також
:help :tabnew
:help :r!
:help :bar
:r!echo
без зміни буфера.
Ось що я роблю. На це згадується в коментарях до вищезгаданих відповідей.
:new | r ! <cmd>
:new | r ! <cmd> # (# is replaced with filename)
Приклад 1 : Знайдіть усі текстові файли в/tmp
:new | r ! find /tmp -name '*.txt'
Приклад 2 : Ви редагуєте файл foo.txt і хочете запустити ls -la foo.txt
та отримати вихід у буфері:
:new | r ! ls -la #
#
Замінюється на ім'я файлу вихідного буфера ви редагуєте. Це особливо корисно для спеціальних команд управління джерелом, наприклад
:new | r ! hg annotate -un #
:new
створює горизонтальний розкол, використовуйте, :vnew
якщо ви хочете вертикальний розкол замість нього та :tabnew
для нової вкладки.
:tabnew | enew | r ! <your shell cmd>
працює для мене.
Якщо ви дійсно вимагаєте зберігати результат у новому буфері, але вимагаєте інформацію зі старого поточного буфера, то ви можете використовувати system()
:
:let res = system('echo '.expand('%'))
:tabnew
:put=res
або зберегти поточне ім’я буфера для подальшого :
:let bn = expand('%')
:tabnew | :r!echo <c-r>=bn<cr>