Kopiuj i wklej zawartość z jednego pliku do drugiego w vi
Pracuję z dwoma plikami i muszę skopiować kilka linii z jednego pliku i wkleić do innego pliku. Wiem jak skopiować (yy) i wkleić (p) do tego samego pliku. Ale to nie działa dla różnych plików. Jak to się robi?
Czy Jest jakiś sposób na wklejanie? Próbowałem googling, ale większość zasobów mówić tylko o kopiuj-wklej.
18 answers
Ponieważ już wiesz, jak wyciąć / wyciąć tekst, oto kilka pomysłów na wklejenie go z powrotem do innego pliku:
- Edytuj pierwszy plik, wybierając żądany tekst. Następnie otwórz drugi plik z Vi (
:e /path/to/other/file
) i wklej go -
Otwórz oba pliki razem w podzielonym oknie i przejdź między nimi za pomocą Ctrl + w, do góry/W Dół {[10] } albo przez:
vi -o /path/to/file1 /path/to/file2
- z pierwszego pliku, Ctrl + w , s
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-06 22:34:13
Jeśli używasz Vima w systemie Windows, możesz uzyskać dostęp do schowka (ms copy/paste) za pomocą:
"*dd -- cut A line (or 3dd to cut three lines)
"*yy -- copy a line (or 3yy to copy three lines)
"*p -- wklej linię(y) on line za kursorem
"*P -- wklej linię(y) on line przed kursorem
The lets you wklejanie między oddzielnymi oknami Vima lub między aplikacjami Vima i PC (Notatnik, Microsoft Word , itp.).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-01 18:09:48
Użyj wariacji d
Jak dd
do cięcia.
Aby zapisać zakres linii do innego pliku, możesz użyć:
:<n>,<m> w filename
Gdzie <n>
i <m>
są liczbami (lub symbolami) wyznaczającymi zakres linii.
Aby korzystać ze schowka na pulpicie, zapoznaj się z poleceniami +g
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-06 22:35:46
Możesz otworzyć drugi plik i wpisać :r file_to_be_copied_from
. Albo możesz się buforować. Lub przejdź do pierwszego pliku, przejdź do linii, którą chcesz skopiować, wpisz "qY
, Przejdź do pliku, który chcesz wkleić i wpisz "qP
.
"
buffer_name, kopiuje do bufora. Y
jest yank i P
jest umieścić. Mam nadzieję, że to pomoże!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-13 22:44:13
Jest na to jeden sposób;
- Uruchom Vima i otwórz plik1, który jest plikiem, nad którym pracujesz.
- :e file2, który wyświetli plik file2, z którego chcesz skopiować linie.
- zlokalizuj linie, które chcesz skopiować. Jeśli są trzy linie, trafisz 3yy
- :b1 spowoduje to Przełączenie do bufora 1, Gdzie file1 to
- dowiedz się, gdzie chcesz wstawić linie, które Szarpałeś, i naciśnij p
Można też mieć oba pliki do przeglądania. Podziel ekran za pomocą np. Ctrl + w s .
Jeśli chodzi o cięcie, D tnie i umieszcza cięte rzeczy w buforze yank. dd "wytnie" linię.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-15 20:12:22
Są to świetne sugestie, ale jeśli znasz lokalizację tekstu w innym pliku, użyj sed z łatwością. {[0] } spowoduje wstawienie 10 linii do już otwartego pliku w bieżącej pozycji kursora.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-10 06:46:56
2017-05 aktualizacja:
Właśnie odkryłem, że jeśli dodasz następujący wiersz do swojego pliku vimrc,
Set clipboard=unnamed
Wtedy Vim korzysta ze schowka systemowego.
Właśnie znalazłem sposób yank nie będzie działać na drodze, gdzie kopiować zawartość między różnymi oknami instancji Vim. (Przynajmniej nie działa w oparciu o moją wiedzę o Vimie. Nie wiem, czy jest inny sposób, aby umożliwić jej działanie).
The yank way działa tylko na drodze, gdzie wiele plików jest otwieranych w tym samym oknie zgodnie z moim testem.
Jeśli chcesz to zrobić, lepiej Użyj OS cut-copy-past sposób, taki jak Ctrl + x, Ctrl + c (pod Windows).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-15 20:21:35
Podczas edycji pliku zaznacz miejsce, w którym ma być używany początek i koniec
ma
- ustawia znak a
mb
- ustawia znak b
Następnie, aby skopiować to do innego pliku, wystarczy użyć polecenia w
:
:'a,'bw /name/of/output/file.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-16 12:54:46
Te remapy działają jak urok dla mnie:
vmap <C-c> "*y " Yank current selection into system clipboard
nmap <C-c> "*Y " Yank current line into system clipboard (if nothing is selected)
nmap <C-v> "*p " Paste from system clipboard
Więc, gdy jestem w trybie wizualnym, zaznaczam linie, które chcę i naciskam Ctrl + c a następnie Ctrl + v aby wstawić tekst do pliku odbiorczego. Możesz użyć " * y, jak również, ale myślę, że to jest trudne do zapamiętania czasami.
Jest to również przydatne do kopiowania tekstu z Vima do schowka.
Źródło: kopiowanie i wklejanie między sesjami przy użyciu pliku tymczasowego
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-15 23:09:13
Cel: zapisanie fragmentu jednego pliku do innego.
Rozwiązanie :
- Wybierz tekst, który chcesz zapisać:
- Umieść kursor w miejscu, w którym chcesz rozpocząć zaznaczanie
- Naciśnij v, aby wybrać znaki lub wielkie litery V, aby wybrać całe linie
- przesuń kursor na koniec tego, co chcesz wybrać
-
Zapisz wybrany tekst do nowego pliku. Typ :wSpacja i nazwa nowego pliku. Faktycznie zobaczysz
:'<,'>w new.txt
Następnie naciśnij Enter
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-15 20:26:19
Kopiowanie tekstu pomiędzy dwoma buforami (== pliki), które są otwierane w tej samej instancji Vima nie stanowi problemu:
Wystarczy wkleić do jednego bufora y (zakładając, że wcześniej zaznaczono obszar do kopiowania w trybie wizualnym), a następnie wkleić do drugiego bufora za pomocą p. Działa również z różnymi kartami, o ile są one w tej samej instancji Vima.
Jak otworzyć dwa pliki w tej samej instancji Vima zależy od Twojego systemu:
- na Win32 jest opcja w menu kontekstowe Edytuj jednym Vimem jeśli wybierzesz dwa lub więcej plików
- gdy jesteś na konsoli, możesz to osiągnąć za pomocą
vim file1 file2
- Jeśli używasz Vima jako edytora innego narzędzia, pamiętaj, aby określić opcję
--remote-silent
, aby upewnić się, że wszystkie pliki są otwierane w tej samej instancji
Jeśli otworzyłeś dwa pliki w dwóch różnych instancjach Vima, musisz przejść do schowka systemowego: w pierwszej instancji Vima przeciągnij tekst do systemu Schowek używając "+y
(ponownie zaznacz obszar, który ma być szarpany w trybie wizualnym), następnie przejdź do drugiego Vima i wklej tam Schowek: "+p
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-15 20:17:14
Moim scenariuszem było skopiowanie n liczby linii w środku, N nieznanych, z pliku 1 do pliku 2.
:'a,'bw /name/of/output/file.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-22 10:55:39
-
upewnij się, że masz skompilowaną wersję Vima z obsługą schowka
-
:echo has('clipboard')
should return1
- jeśli zwróci
0
(na przykład Mac OS X, co najmniej v10.11 (El Capitan), v10.9 (Mavericks) i v10.8 (Mountain Lion) - zawiera wersję Vima bez obsługi schowka), musisz zainstalować wersję Vima z obsługą schowka, powiedzmy przezbrew install vim
(nie zapomnij ponownie uruchomić terminala po instalacja)
-
- Enter a visual mode (V - multiline, v - plain, or Ctrlv - block-visual)
- Select line(s) you want to copy
- "*y - aby skopiować zaznaczone
- "*p - do wklejenia skopiowane
P. S:
- możesz zastąpić kroki 2-5 instrukcjami z odpowiedzi przez JayG, jeśli potrzebujesz Kopiuj i wklej pojedynczy wiersz
- aby ułatwić zaznaczanie linii, możesz dodać
set mouse+=a
do swojego.vimrc
- pozwoli Ci to na zaznaczanie linii w Vimie za pomocą myszki, Nie zaznaczając elementów zewnętrznych (np. numerów linii itp.) Uwaga: zablokuje możliwość kopiowania zaznaczonego myszką tekstu do schowka systemowego z Vim .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-16 02:42:23
Przykład: fileA i fileB-zacznij w filea w linii 25, skopiuj 50 linii i wklej do fileB
fileA
Goto 25th line
25G
copy 50 lines into buffer v
"v50yy
Goto fileB
:e fileB
Goto line 10
10G
paste contents of buffer v
"vp
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-20 00:16:20
Poniższa opcja działa przez większość czasu, a także do wklejania później.
"xnyy
x - buffer name
n - number of line to Yank - optional
Linie zostaną zapisane w buforze 'x'
.
Można go używać w dowolnym miejscu edycji.
Aby wkleić wiersz (y) w innym pliku,
:e filename&location
Przykład: Wpisz poniższe polecenie w bieżącej edycji
:e /u/test/Test2.sh
and paste using "xP
P - before cursor
p - after cursor
Pełna operacja
Otwórz plik 1 :
vi Test1.sh
a10yy
-Yanked 10 lines
-teraz otwórz drugi plik z bieżącej edycji
*:e /u/test/Test2.sh*
-move the kursor do linii, w której należy wkleić
*"ap*
-- linie z bufora '*a*'
będą kopiowane po bieżącym pos kursora
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-11 07:05:24
Jeśli chcesz skopiować część pliku i wkleić tę zawartość w środku innego pliku, możesz to zrobić w ten sposób.
:linenumber,linenumber write newfile
Przykład:
:2,34 write temp1
Lub
:'mark, 'mark write newfile
Przykład:
:'a,'b write temp1
Teraz linie są kopiowane do innego pliku. Jeśli chcesz usunąć te linie po skopiowaniu, możesz wykonać
:linenumber1,linenumber2 d
Lub
:'mark1,'mark2 d
Teraz przejdź do innego pliku. Następnie trzymaj kursor na linii, w której chcesz wkleić.
Typ
:r!cat temp1
Teraz zawartość plik tymczasowy jest wklejony tutaj. Możesz usunąć plik tymczasowy z samego wiersza poleceń po wklejeniu zawartości.
:!rm temp1
To by pomogło, gdybyś chciał skopiować i wkleić kilka razy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-06 16:13:26
Innym sposobem może być otwarcie dwóch plików w dwóch podzielonych buforach i użycie następującego "fragmentu" po wizualnym zaznaczeniu interesujących linii.
:vnoremap <F4> :y<CR><C-W>Wr<Esc>p
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-04 12:35:13
Wejdź w tryb poleceń i uruchom
:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from
Np. aby wyodrębnić linie 20-30
z filename
do aktualnie otwartego pliku
:r! sed -n '20, 30p' filename
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 21:10:42