Editor VIM

Úplným začátečník s linuxem doporučuji používat jako editor mcedit, který je součástí balíčku mc (midning commander - obdoba starého známého norton commander pro MSDOS) a lze je též vyvolat klávesou F4 po najetí na soubor, který chcete editovat. mcedit nainstalujete přikazen aptitude install mc

Pokud to s Linuxem myslíte vážnějí, naučte se program Vim. Návodů je na internetu celá řada, zde popsané typy jsou užitečné spíše mírně pokročilým, kteří si již nějaký ten základní návod alespoň jednou přečetli. Můžete též začít tím, že se podíváte na náš filmeček.

Plnou verzi editoru Vim nainstalujete příkazem

aptitude install vim

Defaultně je přítomna jen verze základní, která neumí například zvýraznění syntaxe.

Dalším krokem je vytvoření si vlastního konfiguračního souboru. Tím docílíte, že po spuštění bude vim nastaven jak, je vám pohodlné. (např. se syntax highliting)

Příklad konfiguračního souboru:

" řádek s poznámkou začínám uvozovkou
" po startu je zapnuto zvýrazňování syntaxe
syntax on 
" pokud mám v normal režimu českou klávesnici, může být zadávání čísel nebo : značně nepohodlné
set langmap234567890:
"\":,-/,_?,ů:  - tohle je ale už zavádějící
" edituji-li přímo webové stránky, může být dobré z bezpečnostních důvodů vypnout swapovací soubory, které by mohly odkrýt zdrojový kód
"set noswapfile 
" chci li něco pástnout přepnu se do paste režimu, abych tím vypnul automatické odsazování
set pastetoggle=<F11>
" vlevo uvidíme čísla řádek - vypnout se to dá napsáním :set nonumber
set number
 
" uložit soubor bude možné i zmáčknutím klávesy F2, jak jsme zvyklí z editoru mcedit
map <F2> :w<CR>
imap <F2> <Esc>:w<CR>i
 
" vše níže je užitečné, jen pokud chcete provádět zaheslování textových souborů pomocí :X
 
" --------------------------------------------------------------------------------------------
" soubory s koncovkou zip mohou být textové soubory pro vim zašifrovane pomocí blowfish
" více info  šifrování souborů  :h :X  (informace na webu jsou zastaralé)
" Koncovka zip je vybrána jako kamufláž, může být libovolná jiná.
 
function! HeadlineDelimiterExpression(lnum)
    if a:lnum == 1
        return ">1"
    endif
    return (getline(a:lnum)=~"^\\s*==.*==\\s*$") ? ">1" : "=" 
endfunction
 
set cm=blowfish
autocmd BufReadPost,FileReadPost   *.{zip} set viminfo=
autocmd BufReadPost,FileReadPost   *.{zip} set foldexpr=HeadlineDelimiterExpression(v:lnum)
autocmd BufReadPost,FileReadPost   *.{zip} set foldlevel=0
autocmd BufReadPost,FileReadPost   *.{zip} set foldcolumn=0
autocmd BufReadPost,FileReadPost   *.{zip} set foldmethod=expr
autocmd BufReadPost,FileReadPost   *.{zip} set foldtext=getline(v:foldstart)
autocmd BufReadPost,FileReadPost   *.{zip} nnoremap <silent><space> :exe 'silent! normal! za'.(foldlevel('.')?'':'l')<CR>
autocmd BufReadPost,FileReadPost   *.{zip} nnoremap <silent>q :q<CR>
autocmd BufReadPost,FileReadPost   *.{zip} highlight Folded ctermbg=red ctermfg=black
autocmd BufReadPost,FileReadPost   *.{zip} set updatetime=300000
" Když nikdo dlouho nehejbe kurzorem, zavřu foldy a  vim ukončíme
autocmd CursorHold                 *.{zip} normal zm
autocmd CursorHold                 *.{zip} redraw
autocmd CursorHold                 *.{zip} quit
" Pokud dám :q , před odchodem z vimu, zavřeme všechny foldy
autocmd VimLeavePre                *.{bfa,fish} normal zm
autocmd VimLeavePre                *.{bfa,fish} redraw

Otevírání více souborů

První nevýhoda editoru mcedit, která může být dost dobře důvodem, proč přejít na vim, je to, že mcedit neumožňuje mít ovtevřených více souborů zároveň.

V editoru vim otevřete více souborů v různých tabech (pane- proto p) příkazem.

vim -p index.html index2.html readme.txt

Příkaz otevře 3 soubory, mezi kterými můžeme přecházet zadáním gt nebo gT v normálním režimu. Další soubor můžete otevřít pomocí

:tabnew nazev_soboru.txt

Pokud chceme zavřít další tab, použijeme

:bdelete

což je buffer delete nebo

:bdelete!

pokud nechceme výsledek uložit. Tab je možné zavřít i pomocí :q, ale je to nebezpečné, protože soubor stále zůstane v paměti. (není pak možné jej otevřít pomocí jiného vim. Navíc pokud jsme zavřeli tab, ve kterém jsou neuložené změny pomocí :q! , tak vim nejde pak vůbec ukončit, jedině příkazem :qall!)

Pokud chcete porovnávat dva podobné soubory, použijte

vimdiff index.html index2.html

Soubory se v tomto případě otevřou vedle sebe a rozdíly budou zvýrazněny. Přepínat se můžete mezi jednotlivými sloupečky pomocí ctrw+w

Ukládání a vypínání editoru Vim

  • :w - uloží soubor
  • :q - ukončí otevřený tab nebo editor vim
  • :wq - uloží a ukončí
  • :q! - ukončí bez uložení

Pohyb

  • h - je vlevo tak doleva
  • j - připomíná šipku dolu
  • k - nahoru
  • 10k - jde o 10 řádků nahoru
  • l - je vpravo
  • w - word -slovo dopředu
  • b - back - slovo zpět
  • 20G jde na řádek č. 20
  • f} - přemístím na nejbližší znak } v rámci aktuálního řádku
  • % - analyzuje syntaxi a skočí na odpovídající uzavírací znak nebo klíčové slovo. např pokud budu na “{” , tak to skočí na příslušnou (nikoli první) “}” , pokud budu na begin, skočí na end. I přes více řádků. Nefunguje vždy úplně spolehlivě.
  • $ - na konec řádku
  • ^ - na začátek řádku
  • přesun kurzoru v rámci zobrazené stránky H - jako hi, nahoru, L - jako low - dolu , M jako middle - doprostřd
  • Ctrl-E/Y, v insert mod Ctrl-X Ctrl-E/Y - scrolování, kurzor zůstává na stejném místě v textu
  • [count]Ctrl-U, [count]Ctrl-D - skrolování - je-li možné scrolovat, kurzor zůstává na stejném místě obrazovky
  • gt - jde na následující tab
  • gT - jde na předchozí tab
  • gf - go to file - otevře soubor, nad kterým je kurzor, vhodné hlavně pro procházení manuálu/helpu, který můžete vyvolat například napsáním :help usr .
  • H - high,L -low M - middle - přemístí kurzor nahoru dolu a doprostřed obrazovky
  • CTRL- u - up půl stránky nahoru, CTRL -d - down - půl stránky dolu

Editace

  • i - přepne se do insert režimu
  • I - přepne se do insert přesune se na začátek řádku
  • o - vloží nový řádek za a přepne do insert modu
  • O - vloží nový řádek před a přepne se do insert modu
  • cw - change word - smaže slovo a přepne do insert módu
  • ct) - change to ) - smaže vše na řádku až po znak )
  • x - smaže znak, ale nepřepne se do insert režimu
  • r - replace - nahradí jeden znak - tedy přepne do insert režimu jen na jeden znak a pak vrátí do normal, z insert režimu se vyskakuje mocí Escape.

mazání a vizuální režim (copy and paste)

mazání v normal režimu = vkládání do zásobníku

  • dd - smaže řádek
  • dw - delete word - smaže slovo
  • v - vizuální režim, najedu si, kam chci použitím kláves pro pohyb, a pak volím
    • d - výběr smažu a uložím do zásobníku pro pozdější paste
    • y - yank - výběr jen uložím do zásobní pro pozdější paste
  • V - vizuální režim po celých řádcích (výhodné, pokud chci zkopírovat blok kódu - tedy hodně často)
  • ctrl-v - vizuální režim pro práci s bloky, označím si blok
    • I - a vložím jeden nebo více znaků a pak ESC - tak mohu přidat např. znak # jako první znak celého bloku
    • d - vymažu blok
  • p - paste - vložím za kurzor
  • P - paste - vložím před kurzor
  • :reg - vypíše historii registru copy a paste
  • “1p nebo “1P pastne první - tedy předposlední hodnotu (nikoli nultou jako samotné p) znak na začátku jsou uvozovky
  • “ly yankne tedy uloží se právě označené pod písmeno l

Folds

foldy - záhyby - je způsob jak můžeme zpřehlednit soubor tím, že umožním skrýt jistou jeho část.

Rozevřený fold

Část níže se skryje
{{{   - tohle značí začátek 3 závorky za sebou
tohle je část, kterou pak mohu skrýt, aby vše bylo přehlednější
}}}   -  tohle značí konec foldu - tři závorky

zavřený fold

Část níže se skryje
+--  4 řádků:- tohle značí začátek foldu----------------------------------
  • zc - c jako close - skryje část, v které je kurzor
  • zo - o jako open - otevře skritou část, na které je kurzor
  • zm - zavře o jednu vrstvu foldů více
  • zM - všechny foldy zavře - soubor tak bude krátký a přehledný
  • zr - otevře o jednu vrstvu foldů více
  • zR - všechny foldy otevře
  • zf - vytvoří folder (pokud předtím označíme blok, vytvoří ho s pomocí bloku)
  • zd - smažee folder pod kurzorem

Hledání a případná náhrada

Pokud chci něco najít, napíši lomítko / a slovo, které hledám Enter. Hledané slovo pak bude zvýrazněno a já mohu procházet jednotlivými výskyty mačkáním n- n jako next N - velké N jako opak next tedy předchozí

příklady nahrazování:

:12,31s/\$oper\[/                             /g 
:%s/,\(2720[0-9]\{5\}\)\/\(.\{8\}\)/register => \1:\2@mujtel\/00420\1/gc
:1,3s/\([0-9]\{9\}\)/insert into VTAs set cislo='\1';/g
:10,20s/.*=> \([0-9]\{9\}\):.*/insert into vd_cisla set id='00420\1'/   # nebo % na začátku
:%s/ *$//gc    # smaže prázdné konce řádků v celém souboru - může vzniknout nechtěně, když provedeme paste
:%s/^\([0-9]\{9\}\)$/insert into VTAs set cislo='\1';/g # na každém řádku najdu devítimístné číslo, udělám z něj sql dotaz
:%s/^\([0-9]\{12\}\) *\([^ ]*\)/insert into ukr_acc set number="\1",pass="\2";/gc # vloží jméno a heslo do databáze
:26,40s/^| \([0-9]\{6\}\).*\([0-9]\{9\}\)$/update `lines` set emergency_callerid='00420\2' where id=\1 limit 2;/gc

:%s/^\([0-9]*\),\([0-9]\{6\}\)$/update `lines` set callerid="\1" where id="\2" and user_id='7011685';
:%s/^\([0-9]*\),\([0-9]\{6\}\)$/INSERT INTO queue_pending_jobs SET created_on=NOW(), job_type='proxy_clip_reload', params='[\2,"\1"]';

hinty % - značí, že se provádí na celém souboru, 1,3 - značí, že se provádí od řádky 1 do řádky 3,
$/^ - konec/začátek řádku
g - provádíme globálně tedy vícekrát ne jen jednou
c - confirm - budeme dotázání- zda-li si záměnu přejeme provést.

Kontrola pravopisu - spell check

Instalace českého slovníku:

cd /usr/share/vim/vim71/spell/
wget ftp://ftp.vim.org/pub/vim/runtime/spell/cs.utf-8.spl

Zapínání, vypínání, volba jazyka

:set spell spelllang=cs
:set spell spelllang=en
:set nospell
:syntax off  # - zvýrazňování syntaxe může být někde nepřehledné, když je používáno dohromady s kontrolou pravopisu
:syntax on

Nastavení si můžete uložit do svého konfiguráku /etc/vim/vimrc.local (tam se ale píše bez dvojteček na začátku) já tam mám též pozměněné barevné rozlišení:

highlight clear SpellBad
highlight SpellBad term=standout ctermfg=1 term=underline cterm=underline
highlight clear SpellCap
highlight SpellCap term=underline cterm=underline
highlight clear SpellRare
highlight SpellRare term=underline cterm=underline
highlight clear SpellLocal
highlight SpellLocal term=underline cterm=underline
  • ]s → následující chyba
  • [s → předchozí chyba
  • zg → slovo pod kurzorem je správně (ukládá do ~/.vim/spell/{spelllang}.{encoding}.add*)
  • zG → slovo je správně, ale po ukončení Vimu je vše zapomenuto (ukládá do /tmp/v*/*)
  • zw → slovo pod kurzorem je špatně
  • zW → jako předchozí řádek, ale po ukončení Vimu je vše zapomenuto
  • z= → vypíše možnosti opravy chybného slova

Vypíše cestu a název otevřeného souboru

:!echo %:p

Nastavit vim VIM jako default pro Midnight commander

Nyní, když už umíme pracovat s editorem vim, nastavíme si jej jako defaultní editor pro Midning commander

vim /usr/share/mc/mc.ext
# Default target for anything not described above
default/*
Open=
View=
Edit=%var{EDITOR:vim} %f

Přidám řádek Edit=%var{EDITOR:vim} %f

Interní editor to přestane používat, i když je nastaveno v menu Nastavení, Konfigurace, že se má používat interní editor.

 
vim.txt · Last modified: 2024/12/18 12:49 by root