GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu převést mezery na karty ve Vimu nebo Linuxu?

1 - Pokud máte mezery a chcete tabulátory.

Nejprve se musíte rozhodnout, kolik míst bude mít jednu kartu. To znamená, že předpokládejme, že máte řádky s úvodními 4 mezerami nebo 8... Pak si uvědomíte, že pravděpodobně chcete, aby tabulátor měl 4 mezery. Nyní s těmito informacemi uděláte:

:set ts=4
:set noet
:%retab!

Tady je problém! Tato sekvence příkazů vyhledá veškerý váš text, nejen mezery na začátku řádku. To znamená řetězec jako:"Hey,␣this␣␣␣␣is␣4␣spaces" bude "Hey,␣this⇥is␣4␣spaces" , ale není! je to karta!.

K vyřešení tohoto malého problému doporučuji search , namísto retab .

:%s/^\(^I*\)␣␣␣␣/\1^I/g

Toto vyhledávání vyhledá v celém souboru všechny řádky začínající libovolným počtem tabulátorů, po nichž následují 4 mezery, a nahradí je libovolným počtem nalezených tabulátorů plus jedna.

Toto bohužel nepůjde spustit najednou!

Nejprve bude mít soubor řádky začínající mezerami. Vyhledávání pak převede pouze první 4 mezery na tabulátor a následující...

Musíte příkaz zopakovat. Kolikrát? Dokud nezískáte pattern not found . Zatím mě nenapadá způsob, jak proces automatizovat. Ale pokud to uděláte:

`[email protected]:`

Pravděpodobně jste skončili. Tento příkaz 10krát zopakuje poslední hledání/nahrazení. Není pravděpodobné, že váš program bude mít tolik odrážek. Pokud ano, opakujte znovu @@ .

Teď už jen dokončit odpověď. Vím, že jste žádali o opak, ale nikdy nevíte, kdy potřebujete věci vrátit zpět.

2 - Máte tabulátory a chcete mezery.

Nejprve se rozhodněte, na kolik prostorů chcete karty převést. Řekněme, že chcete, aby každá karta měla 2 mezery. Poté provedete:

:set ts=2
:set et
:%retab!

To by mělo stejný problém s řetězci. Ale protože je lepší programovací styl nepoužívat tvrdé tabulátory uvnitř řetězců, děláte tu vlastně dobrou věc. Pokud opravdu potřebujete tabulátor uvnitř řetězce, použijte \t .


Pomocí Vimu rozbalte všechny hlavní mezery (širší než 'tabstop' ), měli jste pravdu, když jste použili retab ale nejprve se ujistěte, že 'expandtab' je resetováno (:verbose set ts? et? je tvůj přítel). retab zabírá rozsah , takže obvykle uvádím % znamená "celý soubor".

:set tabstop=2      " To match the sample file
:set noexpandtab    " Use tabs, not spaces
:%retab!            " Retabulate the whole file

Než udělám něco takového (zejména se soubory Pythonu!), obvykle nastavím 'list' , abych viděl mezery a změny.

V mém .vimrc mám následující mapování pro toto:

nnoremap    <F2> :<C-U>setlocal lcs=tab:>-,trail:-,eol:$ list! list? <CR>

Linux
  1. Jak nastavit proměnnou $Path v Linuxu

  2. Jak mohu symbolicky propojit soubor v Linuxu?

  3. Jak nastavit tabulátor na 4 mezery ve vim?

  1. Jak nakonfiguruji Vim jako svůj výchozí editor v Linuxu

  2. Jak nastavit nebo změnit název hostitele systému v systému Linux

  3. Jak mohu nastavit afinitu procesoru k procesu v systému Linux?

  1. Jak nastavit tiskárnu v systému Linux

  2. Jak nastavit linuxové chroot vězení

  3. Jak můžete přepnout klávesy j a k ve vim?