Jak zaznaczyć cały tekst w Vi / Vim?

193

Korzystanie z narzędzia VI do edycji plików konfiguracyjnych.

Jak mogę zaznaczyć cały tekst w pliku (około 1000 wierszy), skopiować go, a następnie wkleić do Dokumentów Google?

Tarun Gupta
źródło

Odpowiedzi:

158

Najprostszym i najszybszym sposobem jest użycie: : % y +a następnie przejdź do Dokumentów Google (lub gdziekolwiek) i wklej. Wyjaśnienie:

  • % odnieść następne polecenie do pracy na wszystkich liniach
  • y  szarpać te linie
  • +  aby skopiować do schowka systemowego

Innym sposobem jest, g g " + y Gale prawdopodobnie przyznasz, że powyższe jest szybsze i łatwiejsze.

Tuxmentat
źródło
10
@Tuxmentat czy możesz wyjaśnić, co robi każdy klawisz:%y+
Jas
10
Ta odpowiedź byłaby lepsza, gdyby wyjaśniła, co robi każdy klawisz dla obu sekwencji.
AsksAnyway
6
Moje najlepsze przypuszczenie: „:” oznacza, że ​​używamy polecenia „ex mode” (tak myślę). W każdym razie jest to polecenie. „%” to specjalny specyfikator zakresu wiersza poleceń, który określa cały plik. „y” oznacza wszystko, a „+” określa rejestr schowka . : help <polecenie> pomogło mi to rozgryźć.
Hawkeye Parker
11
muszę robić coś złego. I typu :%y+, a ja dostaćE488: Trailing characters
Johny dlaczego
24
Otrzymuję komunikat „E850: nieprawidłowa nazwa rejestru”. Druga metoda działała dobrze podczas kopiowania, ale nie trafia do schowka systemowego na Ubuntu 16.04 (przynajmniej dla mnie - mam plik .vimrc, który może mieć wpływ na różne rzeczy).
EntangledLoops
95

Wiele udzielonych odpowiedzi również pociąga za sobą wybór, którego nie szukałem.

Używam ggVGdo tego celu (musi być uruchomiony w trybie normalnym). To polecenie zaznacza tylko cały tekst w dokumencie.

Przesunąłem nawet Ctrl+Aw tym celu, ponieważ tak naprawdę nie muszę zwiększać liczby całkowitej za pomocą skrótu ( Ctrl+Amapa domyślna ).

Po prostu dodaj to do .vimrc:

map <C-a> <esc>ggVG<CR>

Ma <esc>po pierwsze, aby upewnić się, że użytkownik jest w trybie normalnym.

Arda
źródło
2
Dokładnie tego szukałem i fajnie jest zobaczyć, że Ctrl + A nie jest domyślnie zajęty w vimie. Mam nadzieję, że nie ma żadnych skutków ubocznych.
Nikos Alexandris
2
Ja osobiście używam ggVG, ale gg0vG$może być bardziej odpowiednie, ponieważ dokładniej odwzorowuje „normalną” operację Ctrl + A.
Sheharyar
39

Możesz użyć, cat filea następnie wybrać dane wyjściowe oraz skopiować i wkleić, jeśli chcesz wkleić go do przeglądarki.

W przypadku vi możesz zaznaczyć cały tekst i zapisać go w nowym pliku:

shift v  -- visual mode
shift g -- jump to eof
"*y -- yank select text
:e my_new_file -- create a new file
"*p -- paste into a new file

Teoretycznie powinno to działać zarówno w systemie Linux, jak i Windows - wypróbowałem to na komputerze Mac, ale nie działa.

silviud
źródło
1
Aby wkleić do przeglądarki internetowej, cat filemożna to zrobić. shift vJedyna metoda kopii do wewnętrznego bufora Vi.
Aleksandr Levchuk
nie, jeśli używasz schowka systemowego, który korzysta z rejestru * - ale działa to tylko na X i słyszałem w systemie Windows - więc jeśli potrzebujesz ssh, potrzebujesz -X - aby sprawdzić, czy vim obsługuje to w vimie -: ustaw schowek + = unnamed
Czy jest jakaś alternatywa, aby to zrobić bez tworzenia nowego pliku. Jeśli edytujemy na żywo na serwerze, musimy zachować kod zapasowy na komputerze lokalnym, abyśmy mogli przywrócić go z powrotem.
NJInamdar
+1 dla kota i wybierz w szpachli. Oczywiście nie będzie działać w przypadku dużych plików i nie jest najbardziej przyjazną dla użytkownika metodą. Ale do kopiowania małych plików skryptów, które wychodzą poza okno ekranu, jest wystarczające.
Arnis Juraga
16

UŻYJ ggVG. wpisz „gg”, aby przejść na górę testu Następnie wpisz VG.

użytkownik402791
źródło
7

gg"+yG

lub

gg"*yG

w zależności od tego, czy + lub * jest schowkiem systemowym. (W wielu systemach uniksowych + to bufor wyboru myszy do klikania środkowym przyciskiem myszy, a * to schowek systemowy).

frabjous
źródło
1
Myślę, że jest na odwrót: „* to wybór, a„ + to schowek. vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Mikel
Masz rację. Też to wiedziałem, ale wpisałem niewłaściwą rzecz. ☹
frabjous
7

Używam Vima 7.4 w środowisku CentOS-7. Który pracował mnie do zaznaczenia całego tekstu

:%y

Potem tylko pw następnym pliku, w którym chcę pełną kopię.

Lub

Możesz użyć polecenia cat.

cat copyfile > pastefile

To repozytorium git zawiera także kilka innych przydatnych poleceń.

Sachith
źródło
3

W przypadku komputera Mac użyj pbcopy (kopia z tektury):

cat file.txt | pbcopy

Zawartość pliku.txt znajduje się teraz w schowku w celu wklejenia do innej aplikacji (np. Przeglądarki).

Możesz również wkleić zawartość schowka do pliku za pomocą pbpaste:

pbpaste > file.txt

Chociaż nie dotyczy to w szczególności vi, osiąga ten sam cel na komputerze Mac.

Chris
źródło
1

Jeśli używasz pulpitu Linux, możesz załadować go do schowka za pomocą xclip lub xsel. W przypadku czegoś o takim rozmiarze możesz po prostu użyć funkcji przesyłania w dokumentach Google.

Cakemox
źródło
1

Innym sposobem byłoby:

Naciskasz vklawisz na klawiaturze i zmieniasz VIM w VISUAL

Następnie zaznacz cały tekst, przewijając w dół

^+ INSERTdo skopiowania

SHIFT+, INSERTaby wkleić tekst w dowolnym miejscu w Dokumentach Google.

użytkownik237678
źródło
0

Użyj następującego polecenia.

cat <your file name>

Powtórzy treść pliku. Teraz wybierz, przewiń, skopiuj, wklej.
Koniec gry

Dawny.:

cat bobis.txt
użytkownik359247
źródło