GNU/Linux >> Znalost Linux >  >> Linux

Jak přistupovat k shellu nebo spouštět externí příkazy z Vimu

Vim, jak už možná víte, je funkcemi nabitý a výkonný editor. Zde v HowtoForge jsme napsali několik návodů na Vim, které pokrývají jeho základní použití, pluginy a také některé další užitečné funkce. Ale vzhledem k moři funkcí, které Vim nabízí, vždy najdeme něco užitečného, ​​o co se můžeme podělit s našimi čtenáři.

V tomto tutoriálu se zaměříme na to, jak můžete spouštět externí příkazy a také přistupovat k shellu příkazového řádku z okna editoru.

But before we start doing that, it's worth mentioning that all the examples, commands, and instructions mentioned in this tutorial have been tested on Ubuntu 14.04, and the Vim version we've used is 7.4.

Spouštění externích příkazů ve Vimu

Někdy můžete chtít spouštět externí příkazy z okna editoru Vim. Vezměme si například situaci, kdy jste otevřeli soubor ve Vimu, provedli nějaké změny, a pak při pokusu o uložení těchto změn Vim vyvolá chybu, že nemáte dostatečná oprávnění.

Ukončení aktuální relace vim a opětovné otevření souboru s dostatečnými oprávněními nyní bude znamenat ztrátu všech změn, které jste provedli, takže, budete souhlasit, by to ve většině případů nebylo možné. V takových situacích se hodí možnost spouštět externí příkazy z editoru.

K výše uvedenému případu použití se vrátíme později(**), ale nyní si pojďme vysvětlit, jak můžete spouštět základní příkazy z vim.

Předpokládejme, že při úpravě souboru chcete znát počet řádků, slov a znaků, které soubor obsahuje. Chcete-li to provést, stačí v příkazovém režimu Vimu zadat dvojtečku (:) následovanou třesknutím (!) a nakonec příkaz (v tomto případě 'wc') následovaný názvem souboru (pro aktuální soubor použijte %).

:! wc %

Zde je příklad:

Soubor s výše uvedeným příkazem připraven k provedení:

a zde je výstup na terminálu:

Po zobrazení výstupu stiskněte klávesu Enter a budete přesměrováni zpět do své relace Vim.

Tato funkce se může opravdu hodit v situacích, kdy například píšete kód nebo skript a chcete rychle zjistit, zda kód/skript obsahuje nějaké chyby při kompilaci nebo syntaktické chyby.

Pokračujeme, v případě, že je požadavkem přidat výstup do souboru, použijte ':read !' příkaz. Zde je příklad:

:read ! wc %

Příkaz „read“ vloží výstup externího příkazu na nový řádek pod aktuální řádek v souboru, který se upravuje. Pokud chcete, můžete také zadat konkrétní číslo řádku - výstup bude přidán za tento konkrétní řádek.

Například následující příkaz přidá výstup 'wc' za druhý řádek souboru.

:2read ! wc %

Poznámka :Použijte '$' pro vložení za poslední řádek a '0' pro vložení před první řádek.

Nyní, když se vrátíme k případu použití, o kterém jsme hovořili na začátku (**), zde je příkaz, který vám pomůže uložit soubor, aniž byste jej museli nejprve zavřít (což znamená, že nedojde ke ztrátě neuložených změn) a poté jej otevřít, řekněme , sudo.

:w ! sudo tee %

Přístup k prostředí Vim

Kromě provádění jednotlivých příkazů se můžete také nechat spustit v nově spuštěném shellu z Vimu. K tomu vše, co musíte udělat, je spustit z editoru následující příkaz:

:shell

nebo

:sh

a po dokončení práce s shellem napište 'exit' - tím se vrátíte zpět do relace Vimu z místa, kde jste původně skončili.

Mezera, kterou je třeba mít na paměti

I když možnost přístupu k shellu má v reálném světě své vlastní využití, lze ji také použít jako techniku ​​eskalace privilegií. Jak jsme vysvětlili v jednom z našich dřívějších tutoriálů (na sudoedit), i když uživateli poskytnete sudo přístup pouze k úpravě jednoho souboru přes Vim, mohou spustit nový shell z editoru pomocí této techniky a pak budou moci dělat cokoli jako „root“ nebo superuživatel.

Schopnost spouštět externí příkazy z Vimu je důležitá funkce, která se může hodit v mnoha situacích (některé z nich jsme zmínili v tomto tutoriálu). Křivka učení pro tuto funkci není strmá, takže ji mohou využít začátečníci i zkušení uživatelé.

Používáte tuto funkci již nějakou dobu? Máte něco společného? Zanechte prosím své myšlenky v komentářích níže.


Linux
  1. Jak spouštět skripty Pythonu ze shellu

  2. Jak auditovat přístup k souborům v systému Linux

  3. Jak extrahuji jeden kus bajtů ze souboru?

  1. Otevřete Vim ze skriptu prostředí Bash

  2. Jak spustit soubor sh z jiného souboru sh

  3. Jak spustit skript shellu při spuštění

  1. Jak provádět externí příkazy shellu z ovladače laravel?

  2. Jak spustit příkaz Vim z shellu?

  3. Jak odstranit jakýkoli řetězec ze souboru pomocí skriptů shellu?