как скопировать что-то из редактора vim в командную строку оболочки

Я намерен скопировать что-то из редактора vim в командную строку оболочки. Я пробовал много способов, но все они работают только в одном и том же редакторе vim. Мне нужно скопировать и вставить между редактором vim и командной строкой оболочки. То есть vim -> оболочка

PS: я использую замазку.

РЕДАКТИРОВАТЬ:

Кстати, а что, если просто скопировать что-то из редактора vim и вставить в терминал как в поле unix/linux?

ВНИМАНИЕ:

вывод :echo has("X11") в vim равен 0, поэтому моя система не поддерживает X11!


person dj199008    schedule 16.02.2014    source источник
comment
если вы не можете использовать среднюю кнопку мыши для вставки регистра *, вы можете либо сохранить текстовую часть во временный файл, либо использовать другие инструменты на основе оболочки (grep/sed/awk/....) для извлечения этой части.   -  person Kent    schedule 16.02.2014
comment
средняя кнопка мыши, похоже, выполняет вставку в vim eitor! Это не моя потребность.   -  person dj199008    schedule 16.02.2014
comment
если средняя кнопка работает, можно копировать из vim-›terminal. (если у вас установлен X). вы не объяснили эту часть в своем вопросе. вы можете попробовать эту строку, если она сработает, я опубликую ее как ответ: в vim: выберите строки, нажмите: "*y, переключитесь на свой терминал, щелкните средней кнопкой мыши.   -  person Kent    schedule 16.02.2014
comment
Я выделяю строки с помощью Ctrl+v, а затем нажимаю *y, я нахожу, что *y не работает. Вы имели в виду у? Но когда я нажимаю y и использую среднюю кнопку мыши, это не работает. Я имел в виду, что средняя кнопка мыши может вставлять то, что находится в буфере обмена, в редактор vim, а не в терминал.   -  person dj199008    schedule 16.02.2014
comment
Я имел в виду "*y, он перенесет выделенный текст в регистр *, так что вы можете щелкнуть средней кнопкой мыши, чтобы прочитать его где угодно (не только в терминале)   -  person Kent    schedule 16.02.2014
comment
* кажется, соответствует работе в моей среде vim. Извините, не работает.   -  person dj199008    schedule 16.02.2014
comment
вы нажимаете double quote then star then y! не star y   -  person Kent    schedule 16.02.2014
comment
Ах, я подключаю удаленный хост, который представляет собой Linux, через шпатлевку и открываю редактор vim на удаленном хосте. ОС моего локального хоста — Windows.   -  person dj199008    schedule 16.02.2014


Ответы (4)


Если ваша версия vim >= 7.3.74, вы можете настроить vim на использование системного буфера обмена по умолчанию, добавив строку в ваш .vimrc:

set clipboard=unnamedplus

подробности см. по этой ссылке. Затем вы используете команду y(ank) в vim, содержимое находится в системном буфере обмена.

РЕДАКТИРОВАТЬ:
для этого решения и решения "*y" требуется Vim с поддержкой буфера обмена. Поскольку у вас его нет, используйте cat/grep/less/tail... для извлечения текста, который вы хотите скопировать.

person jfly    schedule 16.02.2014
comment
Моя проблема в том, что я могу вставить то, что находится в буфере обмена, в любой файл, но не могу вставить его в терминал (окно замазки!) - person dj199008; 16.02.2014
comment
да, но комбинация клавиш Shift+Insert работает только при вставке в редактор vim в шпаклевке. - person dj199008; 16.02.2014
comment
Кажется, вы хотите скопировать из редактора vim в терминал, они оба находятся на удаленном хосте, открытом в замазке? Если это так, это было бы невозможно с помощью только шпатлевки, поскольку шпатлевка не имеет доступа к системному буферу обмена на удаленном хосте, а буфер обмена на хосте Windows понятия не имеет, что вы скопировали. Возможно, вам нужна функция пересылки X11 или просто используйте мышь для выбора контента. - person jfly; 16.02.2014
comment
А что, если просто скопировать что-то из редактора vim и вставить в терминал как в поле unix/linux? - person dj199008; 17.02.2014
comment
если вы используете ящик unix/linux локально, а не подключаете его удаленно, все эти ответы должны работать. - person jfly; 17.02.2014
comment
давайте продолжим это обсуждение в чате - person jfly; 17.02.2014

" + y, чтобы скопировать текст в vim, затем ctrl + shift + < kbd>v для вставки в терминал.

person Jake Sellers    schedule 17.02.2014
comment
кажется, что после нажатия ctrl + shift + v он произведет много вещей, которые мне, возможно, не нужны. - person dj199008; 17.02.2014
comment
@user2886717 user2886717 Можно поконкретнее? ctrl shift v просто вставляет все, что находится в буфере обмена, на ваш терминал. Обе классические команды ctrl + c/v можно использовать на терминале, просто добавив Shift. - person Jake Sellers; 18.02.2014
comment
Просто чтобы убедиться, вы нажимаете +? + здесь просто для того, чтобы показать, что вам нужно нажать все три кнопки одновременно, вы на самом деле не нажимаете клавишу + для вставки в терминал. - person Jake Sellers; 18.02.2014
comment
Моя система не поддерживает X11, поэтому я предполагаю, что все эти решения не работают для меня. - person dj199008; 18.02.2014

из комментариев кажется, что ваша средняя кнопка мыши работает для буфера *, вы можете выбрать текст в vim, затем нажать: 3 нажатия клавиш:

"*y

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

прочитайте :h y для подробностей, как скопировать текст и сохранить в определенном регистре (в данном случае это регистр *)

person Kent    schedule 16.02.2014
comment
Моя проблема в том, что я могу вставить то, что находится в буфере обмена, в любой файл, но не могу вставить его в терминал (окно замазки!) - person dj199008; 16.02.2014

Использование трубы

Выберите строку [линии] с помощью команды V, затем выполните этот выбор с помощью команды :'<,'>w !sh

person Sergey Voronezhskiy    schedule 20.07.2018
comment
Возможно, это неправильный ответ, потому что автор темы хочет копировать между vim и shell. Но я пришел сюда из Google, попросив vim скопировать содержимое для выполнения оболочки, и обнаружил, что это решение полностью покрывает мой вопрос. - person Sergey Voronezhskiy; 20.07.2018