Czy istnieje sposób na skopiowanie wszystkich wierszy z otwartego pliku do schowka w edytorze VI. Próbowałem, yGale nie używa schowka do przechowywania tych linii.
Czy to możliwe?
Czy istnieje sposób na skopiowanie wszystkich wierszy z otwartego pliku do schowka w edytorze VI. Próbowałem, yGale nie używa schowka do przechowywania tych linii.
Czy to możliwe?
Odpowiedzi:
Powinieneś szarpnąć tekst do rejestru*
lub :+
gg"*yG
Wyjaśnienie:
gg
aby ustawić kursor na pierwszym znaku pliku"*y
aby uruchomić polecenie szarpnięcia do rejestru *
od pierwszego wiersza, aż ...G
przejść na koniec pliku"
. po naciśnięciu „a dostajesz á”). Jeśli tak, musisz nacisnąć spację po .
:version
vim i poszukaj +xterm_clipboard
flagi. Jeśli jest poprzedzony znakiem minus, to nie będziesz mieć tej funkcji. W takim przypadku możesz samodzielnie skompilować vima lub uruchomić gvim, który zwykle ma włączoną tę funkcję.
Posługiwać się:
:%y+
szarpać wszystkie linie.
Wyjaśnienie:
%
odnieść następne polecenie do pracy na wszystkich liniachy
szarpać te linie+
aby skopiować do schowka systemowegoUwaga : w systemie Windows +
i *
równoważne patrz ta odpowiedź .
:help
aby upewnić się, że naprawdę jesteś w vimie.
set clipboard=unnamed
, ale to zadziałało świetnie!
E850: Invalid register name
:(
na Macu
skopiuj wybraną część: wizualnie zaznacz tekst (wpisz v
lub V
w trybie normalnym) i wpisz tekst:w !pbcopy
skopiuj cały plik :%w !pbcopy
przeszłość ze schowka :r !pbpaste
pbcopy
to narzędzie dla komputerów Mac. W systemie Linux xsel
może zamiast tego działać lub clip
w systemie Windows.
:%w !pbcopy
nadal działa, jeśli plik jest dłuższy niż wysokość terminala.
Schowek jest buforem +. Aby skopiować do schowka, wykonaj "+yi [ruch].
Skopiuje gg"+yGcały plik.
Podobnie, aby wkleić ze schowka, "+p
Innym łatwym sposobem na skopiowanie całego pliku, jeśli masz problemy z używaniem VI, jest po prostu wpisanie „cat filename”. Wyświetli plik na ekranie, a następnie możesz po prostu przewijać w górę i w dół oraz kopiować / wklejać.
:!cat %
. I programowo skopiować zawartość pliku do schowka w systemie Mac OS::!cat % | pbcopy
Oto, co robię, aby szarpać cały plik:
ggVGy
clipboard
zestaw do kopiowania szarpanego tekstu +
.
Możesz użyć polecenia „cat”, aby otworzyć plik i użyć myszy do kopiowania
reset
terminal, a następnie wybierz wszystko i skopiuj. Działa to poprzez ssh
sesję.
(w odpowiedzi na @rshdev i aby uniknąć konieczności ponownej kompilacji vima z + xterm_clipboard na @nelstrom w komentarzach do OP)
w Ubuntu 11 jest program o nazwie xclip, który działa jak putclip:
:%!xclip -sel clip
u
nie jest domyślnie instalowany. aby zainstalować, użyj:
sudo apt-get install xclip
Na Ubuntu 12
możesz spróbować zainstalować vim-gnome
pakiet:
sudo apt-get install vim-gnome
Próbowałem, ponieważ vim --version
powiedział mi, że flaga Xterm_clipboard będzie wyłączona (wskazane przez - ), która jest potrzebna do korzystania z funkcji schowka.
-> instalacja pakietu vim-gnome na Ubuntu 12 również zainstalowała wersję vima opartą na konsoli, która ma włączoną tę opcję (oznaczoną + przed flagą xterm_clipboard)
Na Arch Linux
możesz zainstalować vim-clipboard
z tego samego powodu.
Jeśli uruchamiasz neovim, powinieneś zainstalować xclip
(zgodnie z wyjaśnieniem help clipboard-tool
)
Jeśli używasz Vima w trybie wizualnym, obowiązują również standardowe klawisze wycinania i wklejania, przynajmniej w systemie Windows.
Przynajmniej w terminalu Ubuntu (Gnome) standardowa kopia również działa ( CTRLSHIFTCchociaż nie wydaje się, aby istniał standardowy skrót klawiaturowy dla select all
(inny niż ALTEpo nim A).
Wypróbowałem kilka poleceń wspomnianych powyżej przez ludzi. Żaden nie działał. Potem zdobyłem najprostszy z nich wszystkich.
Krok 1: vi <filename>
Krok 2: Kliknij prawym przyciskiem myszy pasek tytułu okna Kit
Krok 3: Wybierz „Wyczyść przewijanie” (aby uniknąć kopiowania pozostałej sesji SSH)
Krok 4: Ponownie kliknij prawym przyciskiem myszy i wybierz „Kopiuj wszystko do schowka”.
Window > Settings > lines of scrollback
do 40000 (dostępny również poprzez kliknięcie paska tytułu prawym przyciskiem myszy). Pomaga także używać cat
zamiast vi, ponieważ przewija on cały tekst.
:set go=a
ggVG
Zobacz :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.
Cóż, wszystkie te podejścia są interesujące, jednak jako leniwy programista używam szarpnięcia całej linii, używając kombinacji liczby + y
na przykład masz plik kodu źródłowego zawierający łącznie 78 wierszy, możesz wykonać następujące czynności:
gg
aby uzyskać kursor w pierwszej linii y
-> szarpnie 78 linii poniżej kursora i bieżącej linii Nie było koncepcji „schowka” w vi Billa Joy'a, więc nie sądzę, że istnieje wbudowany sposób, aby to zrobić.
Automatyczna funkcja kopiowania wyróżnionego do schowka schowka gVim jest najłatwiejsza lub użyj zewnętrznego programu poprzez:!
Do vima Cygwina używam
:%!putclip
u
Może Ubuntu ma aplikację CLI taką jak putclip?
Jeśli domyślnie masz palce CTRL-A CTRL-C
, wypróbuj mapowania z $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
Mam je zmapowane na <Leader><C-a>
i <Leader><C-c>
.
Kopiuj cały plik w vimie lub jego zakładkach
y G
następnie przejdź do karty i wklej
p
i wyciąć cały plik
d G
Wiem, że dziesięć lat w tej sprawie powinno zostać uregulowanych, ale dwie pierwsze odpowiedzi nie zadziałały dla mnie, więc kopałem dalej. Na Redhat (zdalny serwer) - Windows 10 (komputer lokalny), jeśli nie możesz zaznaczyć całej rzeczy myszką, utkniesz, ponieważ zwykłe kopie nie działają między schowkami komputera zdalnego i lokalnego.
Tak więc, aby skopiować na zdalnym systemie Linux i wkleić na lokalnym systemie Windows, określ bufor główny za pomocą * i wykonaj ładne podwójne szarpnięcie
Zastosowanie gg" * yy.
Stworzyłem funkcję do wykonania tej akcji, umieść ją na swoim ~/.vimrc
.
fun! CopyBufferToClipboard()
%y+
endfun
nnoremap <Leader>y :call CopyBufferToClipboard()<CR>
command! -nargs=0 CopyFile :call CopyBufferToClipboard()
OBS: Jeśli używasz neovim, potrzebujesz również jakiegoś menedżera schowka, takiego jak xclip. Aby uzyskać więcej informacji, wpisz neovim:h checkhealth
Ważne jest również, aby wspomnieć, że nie zawsze jest proste y
będzie skopiować do schowka, tak aby każdy kanał kopiowania +
którym jest „Schowek Rejestracja” spróbować zestawu: :set clipboard=unnamed,unnamedplus
. Aby uzyskać więcej informacji, zobacz::h unnamed
.
Tutaj więcej informacji na temat vim wiki.
Kliknij lewy przycisk myszy, przeciągnij przez sekcję, którą chcesz skopiować i zwolnić. Kod jest automatycznie kopiowany do schowka.
vi
sposobem).
Nie mogłem skopiować plików przy użyciu powyższych odpowiedzi, ale mam kit i znalazłem obejście Quora.
Uwaga: kopiuje wszystkie drukowane znaki z tej sesji do pliku dziennika, więc w końcu będzie duże. W takim przypadku usuń plik dziennika i cat plik docelowy, aby zawartość tego pliku została skopiowana na komputer.