GNU/Linux >> Znalost Linux >  >> Linux

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

Nedávný článek Používejte makra Vim k automatizaci častých úloh od Ricarda Gerardiho zkoumal, co je makro a výhody použití maker k automatizaci opakujících se úloh. V tomto článku uděláte krok dále a prozkoumáte, jaká rekurzivní makra jsou příklady, kde by mohla být užitečná, a některá úskalí, se kterými se můžete setkat.

Základní pracovní postup maker se skládá ze záznamu, přehrávání a zisku. Při nahrávání vyberte, v jakém registru to provede. Existují registry z a do z k dispozici.

[ Také by se vám mohlo líbit: Jak používat Ansible ke konfiguraci Vim ]

Jakmile otevřete Vim a chcete nahrát makro, začněte stisknutím q a zadejte registr, do kterého se má uložit. Poté zadejte sekvenci příkazů, které se mají provést, a q pro ukončení a uložení záznamu. Poté makro znovu přehrajte stisknutím @ a rejstříku.

Zaznamenejte například makro jako qaA - suffixESCjq a poté jej znovu přehrajte stisknutím @a kolikrát je potřeba. Pro snazší přehrání makra po jeho prvním spuštění napište @@ pro přehrání.

Další informace o tom, jak funguje makro

Ponořte se trochu více do maker a prozkoumejte některé jeho vnitřnosti. Makro se zastaví v případě, že nemůže provést některý ze svých příkazů. Pokud například f ( (což znamená najít ( a umístěte kurzor nad něj ) nelze provést, přehrání makra se okamžitě zastaví. Možná si myslíte, že je to problém, ale ve skutečnosti se jedná o funkci a můžete ji využít ve svůj prospěch.

Při záznamu makra se zadává sekvence příkazů. To znamená, že můžete použít jakýkoli příkaz, včetně makra pro spuštění (@ ). Toto je podstata rekurzivních maker, která se při spuštění volají.

V tomto okamžiku můžete začít nahrávat a přehrávat některá rekurzivní makra. Než to však uděláte, podívejte se ještě na jednu věc, než se do toho pustíte. Při nahrávání makra se zadané příkazy provádějí během nahrávání. Pokud tedy přehrajete makro jako součást záznamu a související registr má již něco zaznamenané, spustí se a pravděpodobně přinese neočekávané výsledky.

Zde je první tip:Před záznamem rekurzivního makra se ujistěte, že je registr prázdný. Vymažte registr spuštěním q q , což je stejné jako spuštění nahrávání na , nic se nespustí a nahrávání se ukončí.

S tím vším je konečně čas prozkoumat některé scénáře, kde vám rekurzivní makra ušetří čas navíc.

Nahrávání a přehrávání rekurzivních maker

Pro začátek si vezměme problém vyřešený v předchozím článku:Převeďte následující soubor CSV vytvořený hypotetickým monitorovacím systémem na /etc/hosts formát souboru.

$ 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 

Zde je očekávaný výstup:

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

Makro, které bylo zaznamenáno pro pomoc při převodu formátu souboru, je následující:

0r#f"xldf,A,<ESC>p0df,$px:s/,/\t/g<ENTER>j 

Za předpokladu, že jste právě otevřeli Vim a výše uvedené makro ještě není zaznamenáno, máte několik možností, jak naplnit jakýkoli registr obsahem makra:

1) Zaznamenejte makro a zadejte všechny příkazy

Začněte stisknutím q pak , zadejte všechny výše uvedené příkazy a ukončete stisknutím q .

2) Nastavte registr

Registr můžete nastavit pomocí následujícího příkazu :let @='' a později použít jako makro přehrávání. V tomto případě nemůžete tento příkaz spustit přímo, protože makro má některé speciální klávesy jako Esc a Enter . Chcete-li to obejít, použijte :execute příkaz. Umožňuje vkládání speciálních kláves jako escape sekvence. V normálním režimu zadejte : a poté vložte následující řádek a stiskněte Enter :

execute "let @h='0r#f\"xldf,A,\<Esc>p0df,$px:s/,/\\t/g\<Enter>j'" 

Ujistěte se, že registr h obsah byl správně nastaven. To lze provést spuštěním :reg nebo : reg h v tomto případě:

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

Obsah registru se mírně liší od toho, co bylo nastaveno příkazem :execute příkaz. Je to proto, že :execute převedeno \ a \ na jejich klíčový kód ^[ a ^M resp. To je to, co Vim interně používá ke skutečnému „stisknutí“ kláves.

V tomto okamžiku je registr h obsahuje přesně stejné makro zaznamenané v článku Použití maker Vim k automatizaci častých úkolů. Dalším krokem je udělat to rekurzivní. Tímto způsobem jej můžete spustit jednou a rekurzivně se to opakuje, dokud nedosáhne konce souboru.

Existuje malý trik, jak upravit již zaznamenané makro a udělat z něj rekurzivní. Můžete jej také použít k přidání chybějících příkazů a provedení změn bez záznamu celého makra.

Začněte :let @h=' a poté Ctrl-r Ctrl-r h , zadejte @h' na konci a nakonec stiskněte Enter . Ctrl-r Ctrl-r doslova vloží obsah rejstříku. Toto je stejný obsah, který se zobrazí při kontrole :reg h .

Chcete-li zkontrolovat, zda máte vše, spusťte :reg a zkontrolujte obsah. Mělo by to vypadat následovně:

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

S tímto na místě přejděte na druhý řádek na hosts.csv a znovu přehrajte makro @ nebo @h v tomto příkladu. Bude pokračovat až do konce souboru aktualizující všechny řádky. Bylo to možné, protože makro mělo 0 na začátku a j než se rekurzivně přehraje. Díky tomu šlo o řádek níže a při opětovném spuštění makra umístilo kurzor na začátek řádku.

Všimněte si také, že makro běželo až do konce souboru a zastavilo se, protože již nebude moci jít dolů pomocí j to byla naše podmínka přerušení pro rekurzivní provedení.

[ Hledáte více o automatizaci systému? Začněte s The Automated Enterprise, bezplatnou knihou od Red Hat. ] 

Sbalit

Byla to dlouhá cesta, ale nyní máte k dispozici další nástroj, který vám pomůže zautomatizovat opakující se úkoly, a to i v případě, že tento opakovaný úkol opakuje makro znovu a znovu.

Zkoumali jste také úpravy makra, takže v tuto chvíli možná znáte nahrávání jednoho od začátku. Pokud místo úpravy makra nahráváte, nezapomeňte před spuštěním vyprázdnit cílový registr a mít @ jako váš poslední příkaz. Myslete také na bod přerušení pro vaše makro. Pokud upravujete až do konce souboru, použijte j udělá to.

Další výhodou rekurzivního makra je, že pokud se něco pokazí, lze to zvrátit pomocí jediného vrátit zpět .


Linux
  1. Analyzovat jedno pole z pole Json do pole Bash?

  2. Jak sloučit dvě statické knihovny do jedné?

  3. Rekurzivní kat všechny soubory do jednoho souboru

  1. Zřetězit konkrétní soubory do jednoho jediného souboru?

  2. Jak namapovat jeden příkaz Vim k provádění příkazů Bash založených na OS?

  3. Vim:Jak otevřít více souborů na různých kartách?

  1. Výukový program makra Vi a Vim:Jak nahrávat a přehrávat

  2. Sloučit / převést více souborů PDF do jednoho PDF

  3. Jak rozdělit jeden textový soubor do více souborů *.txt?