Вставте висновок системної команди у поточне місце розташування у vim


33

У vim, коли я використовую

:r !ls somefilename

він вставляє вихід цієї команди в новий рядок під поточним рядком.

Якщо я це роблю

let @a = system("ls")

і пізніше

"ap

він все ще вставляє вихід у новий рядок нижче поточного рядка.

Чи є спосіб зробити так, щоб vim вставити вихід у поточному місці?


Зверніться до цієї корисної відповіді Виконати поточний рядок у
басі

Відповіді:


14

Ви можете вставити вміст буфера буфера обміну між символами за допомогою Ctrl-R * у режимі вставки (і аналогічний підхід для інших буферів). Отже, якщо ви можете отримати системну команду в буфер, вам слід встановити. (Джерело: https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position ).

:let @a=system("ls -l")поставить висновок ls -lв регістр a. Потім можна вставити його (у режимі вставки) за допомогою ^R-a.


Крім того, на більшості платформ буфер обміну синхронізується з регістром (зазвичай *), тому якщо ви передасте командний висновок у буфер обміну, він буде "*для вас використаним.
Бруно Броноський

39
:r !command 

прочитає вихід з команди і вставить її в рядок під поточним рядком. Ось як програмується vi, ви не можете змінити поведінку.

Але скажіть, якщо ви знаходитесь у рядку № 3. Якщо ви спробуєте :r !date. Він буде вставляти значення дати у рядок №4.

Якщо ви хочете, щоб значення дати відображалося на рядку № 3, тоді ви намагаєтеся :2r !dateвставити значення дати у рядок 3.


4
Це вставляється на іншій лінії, але все ж на власній лінії. Я хочу вставити його в поточне місце розташування!
дешмух

13

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

:exe 'norm i' . system("ls -l")

або використовувати регістр виразів ( :help @=):

"=system('ls -la')

потім вдарити P. Або коротшим шляхом:

<CTRL-R>=system('ls -la')<CR>

4
Це відповідь.
Яків

1
Домовились! Це дійсно має бути правильною відповіддю, оскільки воно включає більш програмне рішення (з :exe), яке може бути включено до команд.
метасоаризм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.