Portál AbcLinuxu, 19. dubna 2024 04:54


Dotaz: Vim a autoindent

12.3.2009 18:07 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Vim a autoindent
Přečteno: 342×
Odpovědět | Admin

Dobrý den,

začínám používat více vim, a trápí mě takový bug / feature s automatickým odsazováním. Mám odsazený řádek, zmáčknu enter, a jsem na novém řádku a vim správně odsadil. Jenže když teď "uhnu" kurzorem na nějaký jiný řádek (nebo zmáčknu znova enter), a vrátím se potom zpátky na odsazený řádek, už odsazený není. Stává se mi to třeba tehdy, pokud někde ve třídě definuji metodu, její tělo nechám prázdné a mám ji v plánu dopsat někdy později (nebo se zrovna chci mrknout na jiné místo ve zdrojáku). Potom ručně klepat do klávesy tab docela naštve ;-).

Jestli někdo ví, co s tím, byl bych vděčný. Spíše si myslím, že je to nějaka feature, ale vyhovovalo by víc chování obvyklé v jiných editorech (napevno se tam strčí taby / mezery, a tak to zůstane). A na nějaký :set, co to změní, prostě nemůžu přijít :-(.

Baník pyčo!
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.3.2009 18:10 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Vim a autoindent
Odpovědět | | Sbalit | Link | Blokovat | Admin
Samozřejmě, že pokud na řádek vložím nějaký text, tak odsazený zůstane. Trápí mě to u prázdných řádků, kde zmizí ze začátku taby / mezery, pokud se přesunu jinde, ještě předtím, než na něj neco napíšu.
Baník pyčo!
Tarmaq avatar 12.3.2009 18:38 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Vim a autoindent
Odpovědět | | Sbalit | Link | Blokovat | Admin
:he autoindent
If you do not type anything on the new line except <BS> or CTRL-D and then type <Esc>, CTRL-O or <CR>, the indent is deleted again. Moving the cursor to another line has the same effect, unless the 'I' flag is included in 'cpoptions'.
Takze pokud se presunujete v kodu v insert modu, tak staci nastavit I flag v cpoptions.. Pokud ovsem z insert modu vyskocite do normalu pres ESC, tak se indentace zrusi..
:wq
Don't panic!
12.3.2009 18:57 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Vim a autoindent
Šlo mi o přesunování v insert módu a přesně tohle jsem hledal! Tahám se za uši, příště se do helpu mrknu. Nicméně díky za radu!
Baník pyčo!
12.3.2009 20:20 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Vim a autoindent
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak jsem ukvapil. Řešení co popisoval Tarmaq mi nefungovalo (myslel jsem si, že ano, a jenom proto, že jsem to zkoušel na řádku který jsem odsadil ručně tabem a nebyl autoindentovan). Opravdu funkční řešení jsem nakonec vygooglil a je zde (přidat do .vimrc)
inoremap <CR> <CR><Space><BS>
nnoremap o o<Space><BS>
nnoremap O O<Space><BS>
Více tady.
Baník pyčo!
Tarmaq avatar 13.3.2009 13:20 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Vim a autoindent
coz znamena, ze pri stisku enteru se napise mezera a zase se smaze.. Jinak pokud se vazne chcete naucit pouzivat vim, tak se naucte posouvat v kodu v normalnim rezimu, ne v insertovacim.. Nechavat prazdny radek mi prijde zbytecne, neni lehci tam ten radek nedat a v pripade, ze chcete upravit danou metodu, tak stisknete jen o a budete tam kde chcete byt?
tzn. napr takto
function foo()
{
}
najedete na radek se slozenou zavorkou, stisknete o a kurzor bude nasledujici.. (pomlcky jsou mezery a | kurzor)
function foo()
{
----|
}
Pridavam se k ostatnim co tu psali, ze nechavat radky obsahujici jen ws je nezadouci ;]
Don't panic!
13.3.2009 15:00 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Vim a autoindent
Ale jasné, přecházím na vim postupně, zatím ho mám spíš nastavený jako kate + lehce začínám využívat i jeho fičurky (samozřejmě, že vimtutor jsem si prozkoušel nekolikrát, satrapa stránky znám, atd... ale taky potřebuju pracovat a styl práce budu měnit pozvolně). Co ale píšete mi v ruby autoindentu bohužel nefunguje, po def metoda neví, že by mohl odsadit o jeden tab víc. V C zdrojáku mi to funguje. Hádám, že autoindent nemá pro ruby patřičný mod (nadruhou stranu jsem nějaké speciální pluginy pro ruby někde viděl, až bude čas, tak se podívám jestli na to není nějaký patch).
Baník pyčo!
12.3.2009 22:49 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Vim a autoindent
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jinak je to podle mne spíš feature, aby se zbytečně na řádcích nenechávaly osamocené tabelátory, třeba při opakovaném stisku enter. A něco jako reverzní odsazování (při pohybu směrem vzhůru) není. Osobně jsem si dal alespoň
highlight WhitespaceEOL ctermbg=red guibg=red
match WhitespaceEOL /\s\+$/
abych viděl, jestli se mám připravit na odsazování nebo ne :) Ale v zaneřáděnějším kódu to může i zbytečně rušit.
13.3.2009 01:53 luky
Rozbalit Rozbalit vše Re: Vim a autoindent
Odpovědět | | Sbalit | Link | Blokovat | Admin
Setkal jsem se s tím u několika editorů a nikdy mi to nevadilo, vždycky tam prostě klepnu jedno písmeno a je to :) Zároveň tak nezapomenu, že jsem před odbočením jinam chtěl někam ještě něco dopsat, protože tam klekne kompilace :)
13.3.2009 08:43 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Vim a autoindent
Odpovědět | | Sbalit | Link | Blokovat | Admin

No, ja si pri vytvareni prazdne funkce, nebo treba i jen podminene vetve pridavam komentar s textem "TODO:"...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.