GNU/Linux >> Znalost Linux >  >> Linux

Použijte makra Vim k automatizaci častých úkolů

Ve Vimu je makro funkce, která vám umožňuje zaznamenat sekvenci příkazů, které používáte k provedení daného úkolu. Poté toto makro spustíte mnohokrát, abyste mohli stejnou úlohu zopakovat automatizovaným způsobem.

Makra umožňují zvládnutí zdlouhavých a opakovatelných úkolů tím, že úkol provedete pouze jednou a poté využijete sílu Vim k automatizaci. Makra zlepšují váš pracovní postup a skvěle šetří čas.

V tomto článku prozkoumáme koncept maker Vim na praktickém příkladu.

Problém

Předpokládejme, že obdržíte soubor CSV obsahující seznam hostitelů ve vaší síti z hypotetického monitorovacího systému. Chcete jej převést na /etc/hosts formát pro povolení překladu místních jmen pro hostitele.

Původní soubor je tento:

$ cat hosts.csv 
Description,Hostname,IPAddress,FQDN
"OCP Master Node 1",ocpmaster01,192.168.0.20,ocpmaster01.home.ca
"OCP Master Node 2",ocpmaster02,192.168.0.21,ocpmaster02.home.ca
"OCP Master Node 3",ocpmaster03,192.168.0.22,ocpmaster03.home.ca
"OCP Worker Node 1",ocpnode01,192.168.0.30,ocpnode01.home.ca
"OCP Worker Node 2",ocpnode02,192.168.0.31,ocpnode02.home.ca
"OCP Worker Node 3",ocpnode03,192.168.0.32,ocpnode03.home.ca
"Ansible Host 1",ansibleh01,192.168.0.144,ansibleh01.home.ca
"Ansible Host 2",ansibleh02,192.168.0.145,ansibleh02.home.ca 

Očekávaný výstup je tento:

192.168.0.20    ocpmaster01.home.ca    ocpmaster01    #OCP Master Node 1 192.168.0.21    ocpmaster02.home.ca    ocpmaster02    #OCP Master Node 2 192.168.0.22    ocpmaster03.home.ca    ocpmaster03    #OCP Master Node 3 192.168.0.30    ocpnode01.home.ca    ocpnode01    #OCP Worker Node 1 192.168.0.31    ocpnode02.home.ca    ocpnode02    #OCP Worker Node 2 192.168.0.32    ocpnode03.home.ca    ocpnode03    #OCP Worker Node 3 192.168.0.144    ansibleh01.home.ca    ansibleh01    #Ansible Host 1 192.168.0.145    ansibleh02.home.ca    ansibleh02    #Ansible Host 2

Chcete-li získat očekávaný výstup, musíte upravit vstup změnou pozice některých polí, odstraněním uvozovek a vložením znaků tabulátoru nebo komentáře (# ) přiměřeně. Pro zvládnutí tohoto úkolu použijeme makra Vim.

Vyřešte problém a zaznamenejte makro

Základní pracovní postup makra Vim spočívá v zaznamenávání vašich příkazů a úhozů při provádění úprav potřebných k vyřešení problému na prvním řádku, uložení sekvence příkazů do registru a následném přehrání makra, aby se totéž provedlo na zbývajících řádcích.

Chcete-li zaznamenat makro a uložit jej do registru, zadejte klíč q následuje dopis od a do z který představuje registr pro uložení makra, následovaný všemi příkazy, které chcete zaznamenat, a poté zadejte klíč q znovu pro zastavení nahrávání.

q<register><commands>q 

Chcete-li například zaznamenat základní makro, které vloží nový řádek, a uložit jej do registrace a , použijte tuto sekvenci:

qao<ESC>q 

I když toto makro není užitečné, je příkladem sekvence potřebné k záznamu jakýchkoli jiných maker.

Nahrávání maker ve Vimu je cvičením logiky a vhodným používáním příkazů Vimu. Mějte na paměti, že chcete, aby toto makro bylo opakovatelné na jiných řádcích, i když se vstup poněkud liší. Nejlepší je například použít příkaz dw k odstranění slova namísto opakování příkazu x k odstranění znaků, protože počet znaků ve slově se může lišit řádek od řádku.

Nyní zaznamenejme makro, které převede první řádek našeho souboru CSV do požadovaného formátu a uložíme jej do registru h . Začněte umístěním kurzoru kamkoli na první řádek, který chceme v souboru změnit:

"OCP Master Node 1",ocpmaster01,192.168.0.20,ocpmaster01.home.ca 

Poté spusťte záznam makra stisknutím q a h pro uložení do registrace h :

qh 

Během zaznamenávání makra zobrazuje stavový řádek ve spodní části tuto zprávu:

recording @h 

Dále je dobrým zvykem přesunout postavu na známou pozici, takže makro funguje stejným způsobem nezávisle na tom, kde se kurzor nacházel při spuštění makra. Použijme začátek řádku jako počáteční bod stisknutím 0 :

0 

Toto první pole je popis, který se stane komentářem na konci řádku ve výstupu. Když tam budete, nahraďte uvozovky " znak se znakem komentáře # , takže to nemusíme dělat, když později přesuneme toto pole na konec řádku:

r# 

Poté smažte další uvozovky přesunutím kurzoru na ni pomocí f a stiskněte x pro jeho odstranění:

f"x 

V tomto okamžiku váš první řádek vypadá takto:

#OCP Master Node 1,ocpmaster01,192.168.0.20,ocpmaster01.home.ca 

Dále posuňte kurzor o jednu pozici doprava pomocí l a smažte celý název hostitele až do další čárky:

ldf, 

Pamatujte, že když odstraníte text ve Vimu, také jej zkopírujete. Nyní jej vložíme na konec řádku. Vložte text na konec pomocí A a vložením čárky, poté stiskněte p pro vložení názvu hostitele:

A,<ESC>p 

Nyní jsou pole téměř v požadovaném pořadí. Přesuneme komentář na konec řádku. To provedete přesunutím kurzoru zpět na začátek s 0 a smazáním celého komentáře za další čárkou pomocí df, :

0df, 

Poté přesuňte kurzor na konec řádku pomocí $ , vložte text pomocí p a smažte poslední čárku s x :

$px 

Všechna pole jsou nyní na požadované pozici a váš řádek vypadá takto:

192.168.0.20,ocpmaster01.home.ca,ocpmaster01,#OCP Master Node 1 

Nakonec nahraďte všechny čárky znakem Tab pomocí s příkaz:

:s/,/\t/g<ENTER> 

Řádek odpovídá požadovanému výstupu:

192.168.0.20    ocpmaster01.home.ca     ocpmaster01     #OCP Master Node 1 

Dokončete makro přesunutím kurzoru na další řádek stisknutím j takže můžete makro opakovaně používat. Nakonec zastavte nahrávání stisknutím q :

jq 

Nahráli jste makro a je připraveno k použití. Podívejme se, jak to můžete zkontrolovat dále.

Zobrazení a načtení maker

Protože se makra ukládají do registrů Vim, můžete si uložená makra zobrazit pomocí příkazu :reg pro zobrazení obsahu všech registrů:

:reg
--- Registers ---
""   ,
"h   0r#f"xldf,A,^[p0df,$px:s/,/\t/g^Mj
"-   ,
... 

Můžete také zkontrolovat konkrétní registr, v našem případě registr h, jeho poskytnutím jako parametr do :reg příkaz:

:reg h
--- Registers ---
"h   0r#f"xldf,A,^[p0df,$px:s/,/\t/g^Mj 

Pomocí obou metod můžete vidět obsah registru h odpovídá makru, které jsme zaznamenali dříve. Všimněte si, že speciální znaky jako ESC a ENTER byly nahrazeny reprezentací Vim ^[ a ^M respektive.

Do registrů můžete také načíst makra. Nejprve zkopírujte obsah makra a vložte jej na prázdný řádek ve vyrovnávací paměti. Poté pomocí Ctrl+v+ nahraďte speciální znaky jejich reprezentací Vim a Ctrl+v+ v režimu vkládání. Poté zkopírujte obsah makra do požadovaného registru, například do registru h pomocí tohoto příkazu:

"hy$ 

Dále si přehrajte makro, aby se aktualizovaly zbývající řádky v souboru.

Přehrát makra

Po zaznamenání makra a ověření jeho obsahu použijte makro k provedení stejných úprav na zbývajících řádcích.

Chcete-li makro přehrát jednou, přesuňte kurzor na další řádek a stiskněte @h kde h představuje registr, do kterého jste makro uložili.

Všimněte si, že makro podle potřeby automaticky přesune kurzor na další řádek. To vám umožní opakovat jeho provedení. Chcete-li zopakovat provádění makra, stiskněte @@ .

Nakonec můžete makro zopakovat na všech zbývajících řádcích pomocí Vim číslo syntax. Chcete-li například spustit makro na pěti zbývajících řádcích, stiskněte 5@@ nebo 5@h .

To funguje dobře, pokud přesně víte, kolikrát chcete makro spustit. Pokud chcete místo toho spustit makro na všech řádcích až do konce souboru, bez ohledu na počet řádků, použijte tuto syntaxi:

:%:normal @h 

Všechny řádky v souboru nyní odpovídají očekávanému výstupu. Chcete-li dokončit změny, odstraňte řádek nadpisu na začátku.

Co bude dál?

Makra Vim jsou výkonným zdrojem, který vám umožňuje rozšířit funkčnost Vimu a rychle provádět složité úkoly.

Výhody spuštění makra můžete vidět v souboru s osmi řádky. Představte si, že byste byli povinni udělat něco podobného v souboru se stovkami nebo tisíci záznamů. Můžete to dokonce otestovat zkopírováním těchto osmi řádků a stokrát je vložit a poté znovu použít makro.

Pokud používáte makra v souboru s tisíci řádky, podívejte se na set lazyredraw příkaz ke zlepšení výkonu. Toto nastavení zabrání Vimu v překreslování obrazovky pro každou iteraci makra.

Vytváření maker Vim vyžaduje, abyste mysleli a prováděli úkoly optimalizovaným způsobem. Je to dobré cvičení, když používáte Vim, abyste přemýšleli o tom, jak provádět úkoly způsobem, který je činí opakovatelnými a umožňuje vám je v případě potřeby převést na makra.

Díky tomu budete s Vimem zběhlejší a na oplátku budete těžit z pokročilejších funkcí, které zlepší váš pracovní postup a ušetří čas.

[ Chcete více o Vimu? Stáhněte si tento bezplatný cheat sheet Vim. ]


Linux
  1. Jak používat nástroj příkazového řádku sipcalc Linux

  2. Rekurzivní makra Vim:O krok dále v automatizaci opakujících se úloh

  3. Objevte živé hostitele v síti pod Linuxem

  1. Je možné vytvářet a používat nabídky v (terminálovém) Vimu?

  2. Použijte .vimrc a .vim/ jiného uživatele

  3. TCP wrapper kromě volby

  1. Jak používat `který` u aliasovaného příkazu?

  2. Jak používat typ souboru ve Vimu?

  3. jak používat pylint ve vim