LINUX.ORG.RU

Как в Vim после выхода в шелл скопировать имена файлов в какой-нибудь буфер

 


0

2

Добрый день, часто при редактировании файлов надо вставить имена, в вим выхожу командой shell в оболочку, а как в оболочке скопировать в какой-нибудь буфер имена файлов и вставить их в вим? Какие вообще практики для таких задач?


Ответ на: комментарий от da17

Я не знаю что такое обычный терминал. В gnome3 - будет свой, в kde, konsole - свой, в xfce4, xfce-terminal - свой, в cinnamon - свой, в mate - свой.

Из терминала gnome3, когда-то, разработчики удаляли поддержку помещения в буфер выделенного текста, потом вернули, вроде бы.

Но в cinnamon, mate это работало, да и в других тоже.

Насчёт xterm - не знаю.

Поэтому, что у тебя является обычным - не знаю.

Как сделать без мыши - хз.

Но по мне, так копирование в буфер простым выделением мышью - хороший вариант.

kostik87 ★★★★★
()
  • Использовать встроенный в vim/neovim терминал
  • Использовать возможности эмулятора терминала. Все позволяют выделять мышкой и копировать, во многих есть горячие клавиши для работы с текущим экраном и склоллбуфером
  • Использовать tmux, в нем много функций для работы с скроллбуфером и копированием/вставкой текста
  • Записывать имена файлов во временный файл
  • Использовать команды для работы с буфером обмена вроде xclip
  • Использовать OSC52
Belkrr ★★
()

Или я не понял задачу или всё намного проще: в vim есть автодополнение имён фалов: Ctrl+X Ctrl+F. Очень удобно если в какой-то конфиг или в сырцы требуется вписать путь к файлу. И не нужно ни в какой терминал выходить.

Если нужно выхлоп команды, то примерно так: :r !ls -l, ну а потом вставляешь как обычно.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)

ну как вариант, делаешь ls > ./files, далее vim workingfile и в vim делаешь :read ./files

у тебя вывод команды read попадет в то место, где в тексте находится курсор, может есть дополнительные опции к команде, набери в vim :help read

еще одно, все это проделать вы можете даже не выходя из сессии vim, без всяких :new и :tabnew

IvanRia
()
Последнее исправление: IvanRia (всего исправлений: 2)

Вообще у vim есть autocomplete имён файлов: C-x C-f.

Как вариант запускать в терминале screen. По нажатию C-a ESC, он переходит в copy mode, можно двигаться клавишами j k h l как в vim, копировать с помощью пробела (также поддерживаются y w по тому же принципу что в vim). Вставить C-a ESC.

Чтобы вызвать help по управлению, нажмите C-a ?. Я, например, один раз столкнулся, что после установки в Slackware стоит нестандартное управление, т.к. был создан конфиг файл.

А, ну и вставить C-a ].

Jullyfish
()
Последнее исправление: Jullyfish (всего исправлений: 1)

Для того чтоб перенести текстовые данные из Shell в Vim не надо выходить из Vim. V => :! ls => спискок файлов в буфере.

  1. Понять текстовые данные это STDOUT запущенной команды. Например, список файлов это STDOUT от ls, или нужные имена файлов это объединение ls | grep "txt".

  2. Сам трюк - перенос STDOUT команды в текущей буфер.

  • перейти в режим выделение V.
  • Что-то выделить, пусть даже пробел.
  • Перейти в редактирование консоли :! - с восклицательным знаком, это дать Vim команду запускать Shell, а не собственные команды.
  • ввести саму команду :!ls.
  1. Запомнит этот универсальный алгоритм так как он не только перенаправляет STDOUT, но и направляет STDIN в команду.

Примеры:

banana
apple
orange
avocado
grape
  • V выделить нужное -> :!sort-> отсортированный список
apple
avocado
banana
grape
orange

Также можно вызывать скрипты.

:! sort | ruby -e "STDIN.each_line{|x| puts x.upcase if /e$/ === x.strip }" 
banana
apple
orange
avocado
grape
  • V выделить нужное -> :! sort | ruby -e "STDIN.each_line{|x| puts x.upcase if /e$/ === x.strip }" => строки заканчивающиеся на e и переведенные в верхний регистр.
APPLE
GRAPE
ORANGE

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 2)

Как вариант, установи курсор в vim на пустой строке и выполни в vim команду .!ls ну или любую иную по аналогии, либо в текущем каталоге, либо указав путь до него.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от lbvf50txt

По экспеременировал: V => :!ls => список файлов в текущем буфере. Можно даже без процесса выделения, сразу после перехода в Visual mode (Режим выделения) давать команду после :!.

Есть еще способы писать в буфер, но этот универсальный. Можно и с передачей STDIN в команду, а можно и спустым STDIN. Работает.

lbvf50txt
()
Ответ на: комментарий от lbvf50txt

про 9-ый план:

По этой причине Plan 9 не вышла за пределы академического круга разработчкиков, так и не придя к прикладным разработчикам и админам. И как следствие, сильно отстала от мейнстрима, не в плане концепции, а в плане иннструментария и драйверов

бла-бла-бла ChatGPT QUIC HTTP/3

окститесь, батенька – P9FS/Styx уже давно в WSL

возвращение в продакшн через работы LLM

как только отттудова из лламы плюсню выкинут, а сишечку закинут.

lt;dr: да вовсе не по этой причине. а – из-за самобытного тулчейна kencc ?c/?l/?a с лоадером в линкер лоадере.

да из-за отсутствия например динамической линковки (хотя всё тоже можно сделать и на rfork-е).

для начала, чем отличается тулчейн и особенности постPOSIX-ного 9 плана со стримсами как потомка Research Unix от бздей с сокетами и SysV линуксей.

  1. kencc с 8c/8a/8l, 6c/6a/6l вместо gcc или там tinycc

  2. APE = ANSI POSIX Environment для какой-то там совместимости

  3. в API, соответственно dial и /net/cs вместо listen/accept/bind/sendv/recv/close в сокетах; notify вместо позикс тредов и сигналов

  4. dlopen/dlsym нет (ложки тоже). всё тоже самое делается через rfork с copy on write.

  5. libc тоже почти нет или свой уникодный с <u.h> и print рунами libio с буферами вместо puts/print

  6. как развитие 3., «псевдофайловый интерфейс» к p9fs-ресурсам и мультиплексор физических ресурсов в логические с запросами через ctl-файл. примеры: rio, 81/2, brazilio /dev/window и т.п.

  7. emacs нет. gcc нет. c++ нет (или только comeau в стиле сfront).

  8. но на /n/sources невозбранно можно откопать и x11 и vim и tex и gcc/c++, при желании.

  9. как итог: ядро+базовая система, тулчейн и простые утилиты собираются за 2-3 минуты все целиком. без gcc, эльфов и всяких там с++.

в общем, довольно специфический API чтобы отличаться от линуксей и даже бздей с сокетами.

так что, есть форки.

(вообще, см. awesome-plan9 – например, git, 9vim, vis и т.п.; отдельно про ядра и форки самой системы)

  • 9front – по видимому, наиболее активно пилят драйвера и ядро

  • 9ants – ткни ссылкой этому там hateyoufeel который ищет кластер на plan9, вот оно. где-то там даже майнкрафт и irc чятик запускали. устанавливается и настраивается этот «кластерный plan9» тремя командами в однострочнике.

  • harvey – экспериментальный форк с неясными целями (?переписали часть на go?)

  • r9 – переписанный на русте форк предыдущего более здорового проекта, там где научили plan9 собираться обычным gcc а не kencc и ряд патчей допилили APE => APEX до более полноценной POSIX-подобности.

  • назывался он, кажется, JehanneOS сайт http://jehanne.h--k.it/

исходя из всего вышеизложенного, этот форк как раз наиболее перспективен чтобы допортировать до нормального LFS-подобного миниюникса.

anonymous
()
Ответ на: комментарий от anonymous

LLM это вряд ли, они даже с портированием библиотеки с c++ на упрощенный C++ который java не справляюцца, спроси peregrine.

(хотя там по идее надо что-то типа нативных асмовых вставок или JNI оберток; или что-то типа AOT вроде Excelsior JET/GraalVM).

в общем, нужен нормальный порт вот этого под более полноценный LFS.

вообще, см. например скриншоты с сайта проекта jehanne – еще до того как они упоролись и все на раст переписали.

где-то было видео как они в QEMU KVM кроссконпелируют своим тулчейном, самолично собранной GCC-ой.

судя по всему – это мог бы быть Plan 9 здорового человека

  • поддержка эльфов и динамической линковки (емнип, в ведро добавлена пара сисколлов)

  • gcc

  • APEX

  • … => mksh /busybox подобное для минимальной сборки базовой системы, ЕМНИП одной командой в образ для QEMU.

далее читаем LFS Book и устанавливаем LFS … / CRUX/Arch/NuTyx/TinyCore Linux

и делаем свою сборку дистрибутива Plan 9 здорового человека просто по аналогии.

например, в плане воспроизводимости сборок есть пакетный менеждер hermes на лиспе janet (который 1 файл на с), его seeds и репозитории. проще чем nix или guix – но умеет только конпелять расставляя симлинки на собранное.

там у него hermes собирает под musl и void, а надо бы под подобный Plan 9 здорового человека

в общем: немного отойти от канонiчного kencc и APE в сторону gcc и APEX и сделать из девятого плана свой себе LFS.

ЗЫ: вот вы тут все возмущаетесь на ржавого в ведре люникса. а тут целый форк девятого плана JehaneOS с GCC на руст переписали – и ничего.

anonymous
()
Ответ на: комментарий от lbvf50txt

Хотя как вариант, еще интересно было бы форк Inferno под ондроед собрать, чтобы устанавливался через простой APK.

и ровно всё то же что в plan9 делается через lib9 на сишечке – делать на лимбо под Dis.

там тоже очень интересная система сборки, зело портабельная, как и в девятом плане.

как вариант, например troff из plan9 который уникодный на Limbo переписать и запускать генератор PDF с внедренным TrueType и UTF8 (типа как 9front … FQA генерируется из troff в html и в PDF) – на планшете.

далее тыкать примеры на limbo/tk, например – читалки ebook, html браузера charon, whiteboard и какого-то чятика на styx.

и рисовать свой метапрог на Limbo/tk, ога (который есть уже в inferno shell).

anonymous
()
Ответ на: комментарий от lbvf50txt

в этом смысле –

  • harvey os это емнип попытка переписать не на лимбо, а на go;

  • jehanne – с kencc на gcc

  • r9os – на русте

а с лламой, действительно, надо бы разговаривать через plumbing в acme через p9fs и как-то переделывать этот жсон в уникодовый kitty graphic protocol VT100/ANSI подобное текстовой консоли.

сервер «сетевой» файловой системы p9fs / styx пишется не сильно сложнее http сервера. просто API open/walk/read/…/close немного другой.

то есть, далее к лламе надо лепить нечто вроде псевдофайлового интерфейса /dev/window с CTL-файлами.

anonymous
()
Ответ на: комментарий от lbvf50txt

тупая эта ваша гопота – ссылки на jehanne, 9ants и проч само не может найти пока ему вручную не скажешь, лол. проще самому найти чем ее спросить.

надо впрочем про операцию Ы вспомнить как оно называлось, это jehanne,9ants,harvey,r9 и прочее.

Слава Зайцам!

anonymous
()
Ответ на: комментарий от anonymous

как только отттудова из лламы плюсню выкинут, а сишечку закинут.

хотя не, плюсня там тоже работает : http://jehanne.h--k.it/graphic/screenshot-20210106.png

вот он – тайный смысл переписывания хелловордов с <u.h> и <lib9.h> на линуксятину, POSIX-анутость и плюсню.

чтобы ллама работала, же ну. тайна раскрыта

anonymous
()
Ответ на: комментарий от anonymous

ls -lh

выхлопа на скриншоте как раз нет – видимо чтобы не позориться размерами минималистичных мегабайтных хелловордов на гцце с позиксом и libstdc++.a/.so и нативным плановским бинарником – без всего этого, хе-хе

anonymous
()
Ответ на: комментарий от anonymous

а с лламой, действительно, надо бы разговаривать через plumbing в acme через p9fs и как-то переделывать этот жсон в уникодовый kitty graphic protocol VT100/ANSI подобное текстовой консоли.

или вот был такой язык программирования CURL – лисп с {curly-braced language} : чем-то напоминает Dylan, только ООП не CLOS а обычное типа DOM или похожей плюсни.

там есть макросы и динамические переменные.

в общем, жсон лламовый надо в CURL конпелировать.

сам CURL изначальный – это лисп/схема ядро которое в Cи конпелируется и исполняется в песочнице.

примеры батареек: собственно сам хелп интерактивно исполняемый как workbook и например, MVC библиотека с нормальными пакетами и плагинами.

в общем, векторный и гипертекстовый надо делать минималистичный наподобие текстового расширения телнет-подобного MCCM/MXM в MUD-ах, только в {фигуристых-скобках-алгололиспа} – вместо ЖСОНа или, еще хуже – html-я.

без фигуристых скобок обычный лисп или схема с гигиеническими синтаксическими макрами не взлетит, ЛОЛъ.

подобным лиспом обмениваться через plumbing в некотором литературно-грамотном IDE вроде юпитерноутбукового или CURL-подобного workbook-а.

anonymous
()
Ответ на: комментарий от anonymous

Есть инструкции по написанию драйверов? Да и вообще ко всем исходникам системы? Я с ходу не нашёл.

а вот этому вопрошающему имхо хочется что-то литературно-грамотное вроде Ulix book: The Book and the OS, путеводителя по ведру (latex+noweb).

по идее, вместо latex+noweb здесь должен быть troff+funnelweb-utf8, тогда и в нативном 9 плане соберется.

или таки плюсы и гцц, и джеханна.

.. в общем, путеводитель по ведру plan 9 типа той книжки Francicso J Ballesteros – надо бы литературно-грамотно в духе Ulix book книжки переписать.

anonymous
()
Ответ на: комментарий от lbvf50txt

знать задачу о Обедающих Философах и ее решение от Дейскстры.

вот ты смотрел анимэ Panteon? там хипстерский чувак (каспиан?) прямо завис, типа нет нормального решения – согласно CAP теореме, а не при бесконечных бесплатных ресурсах, сферических и в вакууме.

типа его пожилой отец решил за столом уму разуму поучить, спросив за задачку… а потом как услышал полный развернутый ответ – обиделся и убежал.

anonymous
()
Ответ на: комментарий от lbvf50txt

Си нам нужен как учебный язык, компиляция кода которого в Ассемблер наиболее понята

в этом смысле полезно посмотреть на исходники ассемблера на awk на cat-v.harmful.org и на исходники ассемблера в inferno (на cpp препроцессоре + частично совсем мало на lex).

в целом, уже С препроцессора достаточно чтобы написать реализацию ассемблера.

а в одной книжке по современным конпеляторам (например, с SSA, CFG, и прочими) – есть контрольный вопрос к главе «почему С препроцессор работает на основе лексем, а не полноценных токенов или AST»(…/корректно отконпелированных и правильно сформированных лисповых форм, и т.п.)

краткий ответ – потому что тогда понадобился бы D с typeinfo и CTFE трейтом is_compiling(CTFE_макрос(...)) и половина семантического анализа.

так – он там довольно тупой, который сишечный препроцессор на #define лексемах и #if..#elif...#else..#endif.

даже в PL/I препроцессор уже лучше – там есть «функции препроцессора»(сравни с CTFE) и вообще, можно произвольным образом сформировать текстовую строку прежде чем подать ее к конпеляции (пруфлинк: например, реализация PARSE диалекта из интерпретируемого REXX в конпелируемом PL/I через его довольно продвинутый препроцессор)

но, что характерно – даже такого тупого на уровне лексем частично сформированных – уже достаточно для реализации ассемблера (или даже какой-то примитивной рефлексии и сериализации, закатывая солнце вручную).

anonymous
()
Ответ на: комментарий от lbvf50txt

Golang создавался для замены языка С++ в высоконагруженных сервисах компании Google. С специальным упрощением синтаксических конструкций для командной разработки.

даже какая-то презентация на ютубчике Роба Пайка была на полчаса, про причины – в основном то, что плюсня масштабируется отвратительно и долго конпелируется потому что шаблоны богу шаблонов через шаблоны чтобы шаблоны, а не из-за здравого смысла

anonymous
()

Я когда (недолго) сидел на vi, список файлов получал командой find . -type f, написанной прямо в окне редактирования. Чаще всего она была заранее написана со всякими фильтрациями. После чего находил нужный файл, добавлял в начало e! и снова исполнял команду, таким образом открывая файл.

Чтобы это работало, нужно было парочку макросов сделать, vi/vim так не умеет по-умолчанию.

(После перехода на Acme сохранил эту стратегию для поиска по файлам, пока не нашёл более мышевозный способ делать то же самое.)

kaldeon
()