Есть ли способ скопировать все строки из открытого файла в буфер обмена в редакторе VI. Я пытался, yGно он не использует буфер обмена для хранения этих строк.
Так возможно ли это?
Есть ли способ скопировать все строки из открытого файла в буфер обмена в редакторе VI. Я пытался, yGно он не использует буфер обмена для хранения этих строк.
Так возможно ли это?
Ответы:
Вы должны вернуть текст в регистры*
или :+
gg"*yG
Объяснение:
gg
чтобы получить курсор к первому символу файла"*y
запустить команду янки в реестр *
с первой строки, пока ...G
идти в конец файла"
.
:version
vim и найдите +xterm_clipboard
флаг. Если ему предшествует знак минус, у вас не будет этой функциональности. Если это так, вы можете скомпилировать vim самостоятельно или запустить gvim, который обычно включает эту функцию.
Использование:
:%y+
дергать все линии.
Объяснение:
%
обратиться к следующей команде для работы на всех линияхy
дергать эти строки+
скопировать в системный буфер обменаNB : В Windows +
и *
аналогичных см. Этот ответ .
:help
чтобы убедиться, что вы на самом деле в VIM.
set clipboard=unnamed
, но тогда это работало отлично!
E850: Invalid register name
:(
на Mac
скопировать выбранную часть: визуально выделите текст (введите v
или V
в обычном режиме) и введите:w !pbcopy
скопировать весь файл :%w !pbcopy
прошлое из буфера обмена :r !pbpaste
pbcopy
- это утилита для Mac. В Linux xsel
может работать вместо этого или clip
в Windows.
:%w !pbcopy
прежнему работает, если файл длиннее, чем высота терминала.
Буфер обмена является буфером +. Чтобы скопировать в буфер обмена, сделайте"+y и [движение].
Так, gg"+yG скопируем весь файл.
Точно так же, чтобы вставить из буфера обмена, "+p
Другой простой способ скопировать весь файл, если у вас возникли проблемы с использованием VI, - просто набрать «cat filename». Он отобразит файл на экране, а затем вы можете просто прокрутить вверх и вниз и скопировать / вставить.
:!cat %
. И скопировать содержимое файла программно в буфер обмена в Mac OS::!cat % | pbcopy
Вот что я делаю, чтобы вытащить весь файл:
ggVGy
clipboard
набор, чтобы скопировать натянутый текст в +
хотя.
Вы можете использовать команду "кошка", чтобы открыть файл и использовать мышь, чтобы скопировать
reset
Терминал заранее, затем выберите все и скопируйте. Это работает через ssh
сессию.
(в ответ на @rshdev, чтобы избежать необходимости перекомпилировать vim с + xterm_clipboard per @nelstrom в комментариях к OP)
В Ubuntu 11 есть программа xclip, которая работает как putclip:
:%!xclip -sel clip
u
он не установлен по умолчанию. установить, используйте:
sudo apt-get install xclip
На Ubuntu 12
Вы можете попробовать установить vim-gnome
пакет:
sudo apt-get install vim-gnome
Я попробовал это, потому что vim --version
сказал мне, что у него будет отключен флаг xterm_clipboard (обозначенный - ), который необходим для использования функциональности буфера обмена.
-> установка пакета vim-gnome в Ubuntu 12 также установила консольную версию vim, у которой включена эта опция (обозначается знаком + перед флагом xterm_clipboard)
На Arch Linux
Вы можете установить vim-clipboard
по той же причине.
Если вы запускаете neovim, то вам следует установить xclip
(как описано help clipboard-tool
)
Если вы используете Vim в визуальном режиме, стандартные клавиши вырезания и вставки также применяются, по крайней мере, в Windows.
Под терминалом Ubuntu (Gnome), по крайней мере, стандартная копия также работает ( CTRLSHIFTCхотя, кажется, нет стандартного сочетания клавиш для select all
(кроме ALTEсопровождаемого A).
Я попробовал несколько команд, которые люди упоминали выше. Никто не работал. Тогда я достал самый простой из них.
Шаг 1: vi <filename>
Шаг 2: Щелкните правой кнопкой мыши строку заголовка окна Putty.
Шаг 3: Выберите «Очистить прокрутку» (чтобы не копировать оставшуюся часть сеанса SSH).
Шаг 4: Снова щелкните правой кнопкой мыши и выберите «Копировать все в буфер обмена».
Window > Settings > lines of scrollback
до 40000 (также доступно щелчком правой кнопкой мыши на строке заголовка). Это также помогает использовать cat
вместо vi, поскольку это прокручивает весь текст.
:set go=a
ggVG
Смотрите :help go-a
:
'a' Autoselect: If present, then whenever VISUAL mode is started,
or the Visual area extended, Vim tries to become the owner of
the windowing system's global selection. This means that the
Visually highlighted text is available for pasting into other
applications as well as into Vim itself. When the Visual mode
ends, possibly due to an operation on the text, or when an
application wants to paste the selection, the highlighted text
is automatically yanked into the "* selection register.
Thus the selection is still available for pasting into other
applications after the VISUAL mode has ended.
If not present, then Vim won't become the owner of the
windowing system's global selection unless explicitly told to
by a yank or delete operation for the "* register.
The same applies to the modeless selection.
Ну, все эти подходы интересны, однако, как ленивый программист, я использую yank всю строку, используя комбинацию цифр + y
например, у вас есть файл исходного кода с общим количеством 78 строк, вы можете сделать это следующим образом:
gg
получить курсор на первой строке y
-> он возвращает 78 строк ниже вашего курсора и текущей строки В vi Билла Джоя не было понятия «буфер обмена», поэтому я не думаю, что есть встроенный способ сделать это.
Функция автоматического копирования gVim «все, что выделено в буфер обмена» является самой простой или использует внешнюю программу с помощью:!
Для Cygwin's Vim я использую
:%!putclip
u
Может быть, в Ubuntu есть CLI-приложение типа putclip ??
Если ваши пальцы по умолчанию CTRL-A CTRL-C
, то попробуйте сопоставления из $VIMRUNTIME/mswin.vim
.
" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y
" CTRL-A is Select all
noremap <C-A> gggH<C-O>G
inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
cnoremap <C-A> <C-C>gggH<C-O>G
onoremap <C-A> <C-C>gggH<C-O>G
snoremap <C-A> <C-C>gggH<C-O>G
xnoremap <C-A> <C-C>ggVG
Я их сопоставил <Leader><C-a>
и <Leader><C-c>
.
Скопируйте весь файл внутри vim или его вкладок
y G
затем перейдите на вкладку и вставьте
p
и вырезать весь файл использовать
d G
Я знаю, что десять лет на это нужно решить, но первые два ответа у меня не сработали, поэтому я продолжал копать. На Redhat (удаленный сервер) - Windows 10 (локальный компьютер), если вы не можете выделить все целиком с помощью мыши, вы застряли, потому что обычные копии не работают между буфером обмена удаленного и локального компьютера.
Итак, чтобы скопировать на удаленный Linux и вставить в локальную Windows, укажите основной буфер с * и сделайте хороший двойной удар
Использование gg" * yy.
Я создал функцию для выполнения этого действия, поместите ее на свой ~/.vimrc
.
fun! CopyBufferToClipboard()
%y+
endfun
nnoremap <Leader>y :call CopyBufferToClipboard()<CR>
command! -nargs=0 CopyFile :call CopyBufferToClipboard()
OBS: Если вы используете neovim, вам также нужен менеджер буфера обмена, такой как xclip. для получения дополнительной информации введите в Neovim:h checkhealth
Важно также отметить , что не всегда просто y
будет копировать в буфер обмена, для того , чтобы каждый канал копирования +
которым является «Clipboard Регистр» попытаться установить: :set clipboard=unnamed,unnamedplus
. Для более подробной информации см :h unnamed
.
Здесь больше информации о vim wikia.
Вы можете использовать короткое замыкание, как этот:
noremap <F6> :%y+<CR>
Это означает, что когда вы нажимаете F6 в нормальном режиме, он скопирует весь файл и добавит его в буфер обмена. Или вы можете просто ввести в обычном режиме, :%y+
а затем нажмите Enter
.
Нажмите левую кнопку мыши, перетащите через раздел, который вы хотите скопировать и отпустить. Код автоматически копируется в буфер обмена.
vi
способ).
Я не мог скопировать файлы, используя ответы выше, но у меня есть замазка, и я нашел обходной путь на Quora.
Примечание: он копирует все напечатанные символы этого сеанса в файл журнала, поэтому со временем он станет большим. В этом случае удалите файл журнала и перейдите к целевому файлу, чтобы вы скопировали содержимое этого конкретного файла на свой компьютер.