Někdy se ocitnete v situaci, kdy chcete provést změny ve více souborech. Nebo můžete chtít zkopírovat obsah jednoho souboru do druhého. Pokud jste v režimu GUI, můžete jednoduše otevřít soubory v libovolném grafickém textovém editoru, jako je gedit, a použít CTRL+C a CTRL+V ke zkopírování/vložení obsahu. V režimu CLI nelze takové editory používat. Bez obav! Kde je editor vim, tam je cesta! V tomto tutoriálu se naučíme upravovat více souborů současně pomocí editoru Vim. Věřte mi, je to velmi zajímavá funkce Vimu!
Nainstalujte Vim na Linux
Editor Vim je dostupný v oficiálních repozitářích většiny distribucí Linuxu. Můžete jej tedy nainstalovat pomocí výchozího správce balíčků.
Například na Arch Linux a jeho varianty jej můžete nainstalovat pomocí příkazu:
$ sudo pacman -S vim
V Debianu , Ubuntu :
$ sudo apt-get install vim
Na RHEL , CentOS :
$ sudo yum install vim
Na Fedoře :
$ sudo dnf install vim
Na openSUSE :
$ sudo zypper install vim
Upravte více souborů najednou pomocí editoru Vim v Linuxu
Existuje mnoho způsobů, jak upravit násobky pomocí editoru Vim. Znám dvě metody.
Metoda 1
Mám dva soubory, jmenovitě soubor1.txt a soubor2.txt s hromadou náhodných slov. Pojďme se na ně podívat.
$ cat file1.txt ostechnix open source technology linux unix
$ cat file2.txt line1 line2 line3 line4 line5
Nyní upravme tyto dva soubory najednou pomocí editoru Vim. Chcete-li to provést, spusťte:
$ vim file1.txt file2.txt
Vim zobrazí obsah souborů v pořadí. Nejprve se zobrazí obsah prvního souboru a poté druhého souboru a tak dále.

Upravit více souborů pomocí editoru Vim
Přepínání mezi soubory
Chcete-li přejít na další soubor, zadejte:
:n

Přepínejte mezi soubory v editoru Vim
Chcete-li se vrátit k předchozímu souboru, zadejte:
:N
Zde je N velké (typ SHIFT+n).
Začněte upravovat soubory stejně jako v editoru Vim. Stisknutím „i“ přepnete do interaktivního režimu a upravíte obsah podle svých představ. Po dokončení stiskněte ESC pro návrat do normálního režimu.
Vim vám nedovolí přejít na další soubor, pokud existují nějaké neuložené změny. Chcete-li uložit změny do aktuálního souboru, zadejte:
ZZ
Upozorňujeme, že se jedná o dvojitá velká písmena ZZ (SHIFT+zz).
Chcete-li zrušit změny a přejít na předchozí soubor, zadejte:
:N!
Chcete-li zobrazit soubory, které jsou aktuálně upravovány, zadejte:
:buffers

Zobrazení souborů ve vyrovnávací paměti ve VIm
Ve spodní části uvidíte seznam načtených souborů.

Seznam souborů ve vyrovnávací paměti ve Vimu
Chcete-li přepnout na další soubor, zadejte :buffer následuje číslo vyrovnávací paměti. Chcete-li například přepnout na první soubor, zadejte:
:buffer 1
Nebo prostě udělejte:
:b 1

Přepnout na další soubor ve Vimu
Stačí si zapamatovat tyto příkazy pro snadné přepínání mezi buffery:
:bf # Go to first file. :bl # Go to last file :bn # Go to next file. :bp # Go to previous file. :b number # Go to n'th file (E.g :b 2) :bw # Close current file.
Otevírání dalších souborů pro úpravy
Aktuálně upravujeme dva soubory a to soubor1.txt, soubor2.txt. Možná budete chtít otevřít jiný soubor s názvem file3.txt pro úpravu. Co budeš dělat? Je to snadné! Stačí zadat :e následovaný názvem souboru jako níže.
:e file3.txt

Otevřete další soubory pro úpravy ve Vimu
Nyní můžete upravit soubor 3.txt.
Chcete-li zobrazit, kolik souborů se aktuálně upravuje, zadejte:
:buffers

Zobrazit všechny soubory ve vyrovnávací paměti ve Vimu
Upozorňujeme, že pomocí :e nelze přepínat mezi otevřenými soubory pomocí buď :n nebo :N . Chcete-li přepnout na jiný soubor, zadejte :buffer následované číslem vyrovnávací paměti souboru.
Kopírování obsahu jednoho souboru do jiného
Víte, jak otevřít a upravit více souborů současně. Někdy možná budete chtít zkopírovat obsah jednoho souboru do jiného. Je to také možné. Přepněte na soubor dle vašeho výběru. Řekněme například, že chcete zkopírovat obsah souboru1.txt do souboru2.txt.
Chcete-li tak učinit, nejprve přepněte na soubor1.txt:
:buffer 1
Umístěte kurzor před řádek, který chcete zkopírovat, a zadejte yy vytrhnout (zkopírovat) řádek. Poté přejděte na soubor2.txt:
:buffer 2
Umístěte kurzor myši na místo, kam chcete vložit zkopírované řádky ze souboru file1.txt, a zadejte p . Například chcete vložit zkopírovaný řádek mezi řádek2 a řádek3. Chcete-li to provést, umístěte kurzor myši před řádek a zadejte p .
Ukázkový výstup:
line1 line2 ostechnix line3 line4 line5

Kopírování obsahu jednoho souboru do jiného souboru pomocí Vim
Chcete-li uložit změny provedené v aktuálním souboru, zadejte:
ZZ
Znovu upozorňujeme, že se jedná o dvojité velké ZZ (SHIFT+z).
Chcete-li uložit změny ve všech souborech a ukončit editor vim. typ:
:wq
Podobně můžete zkopírovat libovolný řádek z libovolného souboru do jiných souborů.
Kopírování celého obsahu souboru do jiného
Víme, jak zkopírovat jeden řádek. A co celý obsah souboru? I to je možné. Řekněme, že chcete zkopírovat celý obsah souboru1.txt do souboru2.txt.
Chcete-li tak učinit, nejprve otevřete soubor 2.txt:
$ vim file2.txt
Pokud jsou soubory již načteny, můžete přepnout na soubor2.txt zadáním:
:buffer 2
Přesuňte kurzor na místo, kam chcete zkopírovat obsah souboru1.txt. Chci zkopírovat obsah souboru1.txt za řádek5 v souboru2.txt, takže jsem přesunul kurzor na řádek 5. Poté zadejte následující příkaz a stiskněte klávesu ENTER:
:r file1.txt

Kopírování celého obsahu souboru do jiného souboru
Tady, r znamená číst .
Nyní uvidíte, že obsah souboru1.txt je vložen za řádek5 v souboru2.txt.
line1 line2 line3 line4 line5 ostechnix open source technology linux unix

Zkopírování celého obsahu souboru do jiného souboru pomocí Vim
Chcete-li uložit změny do aktuálního souboru, zadejte:
ZZ
Chcete-li uložit všechny změny ve všech načtených souborech a ukončit editor vim, zadejte:
:wq
Metoda 2
Další metodou, jak otevřít více souborů najednou, je použití -o nebo -O příznaky.
Chcete-li otevřít více souborů v horizontálních oknech, spusťte:
$ vim -o file1.txt file2.txt

Otevřete více souborů najednou ve Vim
Chcete-li přepínat mezi okny, stiskněte CTRL+w w (tj. stiskněte CTRL+w a znovu stiskněte w ). Nebo použijte následující zkratky pro pohyb mezi okny.
- CTRL+w k - horní okno
- CTRL+w j - spodní okno
Chcete-li otevřít více souborů ve svislých oknech, spusťte:
$ vim -O file1.txt file2.txt file3.txt

Otevřete více souborů ve vertikálních oknech ve Vimu
Chcete-li přepínat mezi okny, stiskněte CTRL+w w (tj. stiskněte CTRL+w a znovu stiskněte w ). Nebo použijte následující zkratky pro pohyb mezi okny.
- CTRL+w l - levé okno
- CTRL-w h - pravé okno
Vše ostatní je stejné, jak je popsáno v metodě 1.
Chcete-li například zobrazit aktuálně načtené soubory, spusťte:
:buffers
Přepínání mezi soubory:
:buffer 1
Chcete-li otevřít další soubor, zadejte:
:e file3.txt
Chcete-li zkopírovat celý obsah souboru do jiného:
:r file1.txt
Jediný rozdíl v metodě 2 je, jakmile uložíte změny do aktuálního souboru pomocí ZZ , soubor se automaticky zavře. Také musíte zavřít soubory jeden po druhém zadáním :wq . Pokud byste však při psaní :wq postupovali podle metody 1 všechny změny budou uloženy do všech souborů a všechny soubory budou najednou uzavřeny.
Další podrobnosti naleznete na manuálových stránkách.
$ man vim
Doporučené čtení:
- Jak komentovat více řádků najednou v editoru Vim
- Jak spravovat pluginy Vim pomocí Vundle v systému Linux
- Jak používat funkci kontroly pravopisu v textovém editoru Vim
Nyní víte, jak upravit více souborů pomocí editoru vim v Linuxu. Jak vidíte, úprava více souborů není tak obtížná. Editor Vim má výkonnější funkce.
Další tipy Vim napíšeme v příštích dnech. Zůstaňte naladěni!