GNU/Linux >> Znalost Linux >  >> Linux

Jak provést změny nastavení specifické pro soubor ve Vimu pomocí Modeline

Zatímco pluginy jsou bezpochyby jednou z největších předností Vimu, existuje několik dalších funkcí, které z něj dělají jeden z nejvýkonnějších a na funkce bohatých textových editorů/IDE dostupných uživatelům Linuxu. Jednou z těchto funkcí je možnost provádět změny nastavení specifické pro soubor. Tato schopnost je dostupná pomocí funkce Modeline v editoru.

V tomto článku probereme, jak můžete použít funkci Vim's Modeline pomocí snadno srozumitelných příkladů.

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 16.04, and the Vim version we've used is 7.4.

VIM Modeline

Využití

Jak jsme již zmínili, funkce Modeline od Vimu vám umožňuje provádět změny specifické pro soubory. Předpokládejme například, že chcete nahradit všechny tabulátory použité v konkrétním souboru vašeho projektu mezerami, a ujistěte se, že všechny ostatní soubory nejsou touto změnou ovlivněny. Toto je ideální případ použití, kdy vám Modeline pomůže v tom, co chcete dělat.

Takže, co můžete udělat, je umístit následující řádek na začátek nebo konec příslušného souboru:

# vim: set expandtab:

Existuje vysoká pravděpodobnost, že pokud se pokusíte provést výše uvedené cvičení, abyste otestovali případ použití na svém počítači se systémem Linux, věci nebudou fungovat podle očekávání. Pokud je tomu tak, nemějte obavy, protože v některých případech je nejprve nutné aktivovat funkci Modeline (v systémech, jako jsou Debian, Ubuntu, Gentoo a OSX, je z bezpečnostních důvodů ve výchozím nastavení zakázána).

Chcete-li tuto funkci povolit, otevřete soubor .vimrc (umístěný ve vašem domovském adresáři) a přidejte do něj následující řádek:

set modeline

Nyní, kdykoli vstoupíte na kartu a uložíte soubor (kde tab rozbalit byl zadán příkaz modeline), karta se automaticky převede na bílá místa.

Podívejme se na další případ použití. Předpokládejme, že výchozí místo na kartě ve Vimu je nastaveno na 4, ale pro konkrétní soubor jej chcete zvýšit na 8. Za tímto účelem musíte na začátek nebo konec souboru přidat následující řádek:

// vim: noai:ts=8:

Nyní zkuste zadat tabulátor a uvidíte, že počet mezer, které pokrývá, bude 8. 

Možná jste si všimli, že říkám, že tyto modelové příkazy je třeba zadat někde blízko horní nebo dolní části souboru. Pokud se ptáte, proč tomu tak je, důvodem je, že funkce je navržena tímto způsobem. Následující řádky (převzaté z oficiální dokumentace Vimu) by to měly objasnit:

"Modelín nemůže být nikde v souboru:musí být v prvních nebo posledních řádcích. Přesné umístění, kde vim kontroluje modelín, je řízeno modelines proměnná; viz :help modelines . Ve výchozím nastavení je nastaveno na 5 řádků ."

A tady je to, co :help modelines příkaz (odkaz na výše uvedené řádky) říká:

If 'modeline' is on 'modelines' gives the number of lines that is checked for set commands. If 'modeline' is off or 'modelines' is zero no lines are checked.

Zkuste umístit příkaz modeline za výchozí rozsah 5 řádků (buď zespodu nebo shora) a všimnete si, že tabulátorové prostory se vrátí na výchozí Vim – v mém případě jsou to 4 mezery.

Toto chování však můžete změnit, pokud chcete, pomocí následujícího příkazu v souboru .vimrc.

set modelines=[new-value]

Například jsem zvýšil hodnotu z 5 na 10.

set modelines=10

To znamená, že nyní mohu umístit příkaz modeline kamkoli mezi prvních nebo posledních 10 řádků souboru.

Při úpravě souboru můžete kdykoli v průběhu úpravy souboru zadat následující (s editorem Vim v příkazovém režimu), abyste viděli aktuální nastavení související s modelem a také místo, kde bylo naposledy nastaveno.

:verbose set modeline? modelines?

Například v mém případě výše uvedený příkaz vytvořil následující výstup:

 modeline
Last set from ~/.vimrc
modelines=10
Last set from ~/.vimrc

Zde jsou některé z důležitých bodů, které potřebujete vědět o funkci Vim's Modeline:

  • Tato funkce je ve výchozím nastavení povolena pro Vim běžící v nekompatibilním (nekompatibilním s Vi) režimu, ale některé významné distribuce Vimu tuto možnost v systémovém vimrc kvůli bezpečnosti deaktivují.
  • Funkce je ve výchozím nastavení zakázána při úpravách jako root (pokud jste soubor otevřeli pomocí „sudo“, pak není problém – funkce funguje).
  • S 'set' , modelina končí u první dvojtečky bez zpětného lomítka. A bez 'set' , za možnostmi nemůže následovat žádný text. Například /* vim:noai:ts=4:sw=4 */ je neplatný model.

Bezpečnostní obavy

Je smutné, že funkci Modeline od Vimu lze použít k ohrožení bezpečnosti. Ve skutečnosti bylo v minulosti hlášeno několik problémů souvisejících se zabezpečením Modeline, včetně vkládání příkazů shellu, provádění libovolných příkazů, neoprávněného přístupu a dalších. Souhlasím, většina z nich je stará a již by byly opraveny, ale dává tušit, že by funkce Modeline mohla být zneužita hackery.

Závěr

Modeline může být pokročilou funkcí editoru Vim, ale není těžké mu porozumět. Není pochyb o tom, že to vyžaduje trochu křivky učení, ale vzhledem k tomu, jak užitečná funkce to je, není moc co žádat. Samozřejmě existují obavy o bezpečnost, což znamená, že byste měli zvážit své možnosti před aktivací a používáním této funkce.

Už jste někdy použili funkci Modeline? jaká byla vaše zkušenost? Podělte se s námi (a s celou komunitou HowtoForge) v komentářích níže.


Linux
  1. Jak zajistit, aby Ldapsearch fungoval na Sles Over Tls pomocí certifikátu?

  2. Udělejte Vim jako své IDE Perl pomocí pluginu perl-support.vim

  3. Udělejte z Vimu své Bash-IDE pomocí pluginu podporující bash

  1. Jak vrátit zpět a znovu provést změny ve Vim / Vi

  2. Tutoriál:Udělejte z Vimu své C/C++ IDE pomocí c.vim Pluginu

  3. Jak otevřít soubor ve vim pomocí pipe

  1. Jak vytvořit server CS:GO na Linux VPS

  2. Jak vrátit zpět a opakovat ve Vim / Vi

  3. Jak odstranit řádky ve Vim / Vi