Mélyvíz I. : Vifm

Segítséget kaptál? Szívesen töltöd itt az idődet? Visszajársz hozzánk? Támogasd a munkákat: Ko-fi és Paypal!

Mélyvíz, szóval arra gondoltam (Laci barátom után szabadon, i3 ismertető), hogy (lehet) belekezdenék egy olyan sorozatba, ahol szerintem hasznos alkalmazásokat, eszközöket mélyebben körüljárnánk. Ez persze nem jelenti azt, hogy ki akarnám váltani a man-t, vagy az alkalmazás weboldalát, de az egyszerű kedvcsinálónál alaposabban bemutatnám a szerintem hasznos funkciókat, eljárásokat.

Első (és talán nem utolsó) áldozatunk a Vifm, a kétpaneles fájlkezelők klubjából! Volt szó az oldalon a Midnight Commanderről, én felhánytorgattam az LFM-et, de valahogy Vifm kimaradt, pedig az egyik nagy kedvencem, egy igen sokoldalú jószág; akkor nézzük!

A Vifm kulcsfontosságú jellemzője, hogy a felhasználói munkamenetet a Vim-hez hasonló, több üzemmódos modell alapján szervezi meg. Ez a megközelítés lényegesen eltér a klasszikus, sorban egymást követő parancsokat végrehajtó fájlkezelőktől, és lehetővé teszi a sokkal intenzívebb, billentyűzet vezérelt interakciót. Három alapvető mód található a Vifmben: Normál mód, Parancssoros mód és Vizuális mód. Az alapértelmezett mód a Normál mód, ahonnan a felhasználó elindul, és innen hajtja végre az alapműveleteket, navigálhat a fájlrendszerben, és aktiválhat más üzemmódokat.

A Parancssoros mód a : (kettőspont) billentyű lenyomásával érhető el a Normál módból. Ebben a módban a felhasználó be tud írni parancsokat, amelyek a Vifm funkcióit hívják meg. Ezek a parancsok tartalmazhatnak argumentumokat, például fájlneveket vagy beállításokat. A módból való kilépéséhez használható a Escape vagy a Ctrl-C billentyűkombináció. Ez a mód hasonló a Vim parancsmódjához, és lehetővé teszi a Vifm viselkedésének dinamikus módosítását anélkül, hogy el kellene hagynunk a fájlkezelőt.

A Vizuális mód a v billentyű lenyomásával indítható, és célja a fájlok kijelölése tömeges műveletekhez. Miután kijelöltünk egy vagy több elemet (pl. lefelé mozgással j billentyűvel), bármely normál művelet (pl. dd törlés) csak a kijelölt fájlokkal fog végre hajtódni. Ez a mechanizmus a fájlműveletek hatékonyságát növeli, mivel nem kell manuálisan minden egyes fájlt kijelölni a művelet végrehajtása előtt.

A navigáció a Vifmben teljesen a billentyűzeten történik. A fő irányítóparancsok a h, j, k és l billentyűk, melyek rendre balra, le, fel és jobbra mozgatnak. A l vagy Enter billentyű egyszeri lenyomásával beléphetünk egy könyvtárba, vagy ha fájlról van szó, akkor annak megnyitása történik. Természetesen a hagyományos kurzormozgató "nyíl" billentyűk is működnek. A panelek közötti váltáshoz a Space (ezt én megváltoztatom azonnal "kijelölő" billentyűnek) vagy a Tab billentyű használható. A lista elejére és végére ugrani a gg és G kombinációk segítségével lehet. Ezek a parancsok a Vim-ből jól ismertek, ezért az abban már jártas felhasználók rövid időn belül otthonosan érezhetik magukat.

A fájlműveletek direktek és hatékonyak. A fájlok másolásához (yank) a yy parancsot használjuk, majd a p billentyűvel beilleszthetjük őket másolásként, vagy a P billentyűvel mozgathatjuk őket. A már létező fájlok felűlírására a program rákérdez.  A fájlok törlése a dd paranccsal történik, amely a program alapértelmezett kukájába (általában ~/.local/share/vifm/Trash) helyezi őket. Ha véglegesen akarjuk törölni őket, használjuk a DD parancsot. Az átnevezés cw billentyűkombinációval történik. Ez a direkt, parancs-alapú műveletvégzés jelentősen felgyorsítja a mindennapi fájlkezelést, hiszen elkerülhető a “kattintgatós” interakció. Alapértelmezésben a Midnight Commanderhez hasonló működés is elérhető az F3-F8 billentyűkkel.

Az indítási lehetőségek is rugalmasak. Terminálból egyszerűen vifm futtatásával nyithatjuk meg az aktuális könyvtárat. Két könyvtárat külön panelekben megnyitni pedig vifm /útvonal/könyvtár /útvonal/könyvtár formában lehetséges. A kilépéshez a :q (:qw) vagy a ZZ (ZQ) parancs használható.

A Vifm viselkedésének testreszabásához a vifmrc nevű konfigurációs fájlt használjuk. Ez a fájl tartalmazza az összes set parancsot, amelyek meghatározzák a beállításokat, illetve a felhasználó által definiált egyéni parancsokat, billentyűlekezeléseket és más beállításokat. A fájl a ~/.config/vifm/vifmrc elérési úton található meg.

A vifmrc fájlban a beállítások főként set parancsok formájában jelennek meg. Ezek segítségével kapcsolhatjuk be vagy ki a funkciókat, vagy értéket adhatunk nekik. A set parancsok sorrendje néha fontos, különösen a fájltípushoz rendelt parancsok esetében (filetype, filextype), mivel a Vifm a beállításokat felsorolja, és az első találatot használja. Példa egy egyszerű beállításra: set incsearch engedélyezi a keresés közbeni elérést, így amint begépeljük a keresőkifejezést, a Vifm lépked a találatok között. A beállítások típusai különbözőek lehetnek: logikai opciók (set option, set nooption, set invoption), sztring értékek (set option="value"), vagy numerikus értékek (set history=100).

A Vifm képes munkamenetadatainak mentésére is, amelyet a vifminfo.json fájl tárol. Ez a fájl automatikusan frissül, ha a vifminfo opció be van kapcsolva. Tartalmazhatja például az előzményeket, a mentett könyvtárakat, a panelek kurzorpozícióit, stb.. A pontos információk, hogy mik kerülnek elmentésre, a vifminfo opció értékétől függ. Például a set vifminfo=dhistory,savedirs csak a munkamenetben történt könyvtár megnyitásokat és az aktuális könyvtárakat rögzíti. A munkamenet adatok manuális mentése a :write paranccsal történik, kilépéskor :wq vagy ZZ, kihagyás :q! vagy ZQ paranccsal lehetséges. Létezik továbbá a --no-configs indítási opció is, amely letiltja a vifmrc és vifminfo fájlok betöltését, ami hasznos lehet hibakeresés során.

Könyvjelzők: a könyvjelzők segítségével pillanatok alatt elérhetünk a gyakran látogatott könyvtárakba. A könyvjelzőknek két típusa van: ideiglenes és állandó. Az ideiglenes könyvjelzőkhöz egy betűt kell hozzárendelnünk az aktuális könyvtárhoz az ' (apostrof) és után következő betűvel, például 'm menti az aktuális könyvtárat a ‘m’ könyvjelzőhöz. Ezt követően '' (két apostrof) lenyomásával visszatalálunk oda. Az állandó könyvjelzőkhöz használjuk a :bmark parancsot, például :bmark példa menti az aktuális könyvtárat a ‘példa’ nevű könyvjelzőhöz. Ezek a könyvjelzők a Vifm munkameneten keresztül érvényesek, de ha a vifminfo opció be van kapcsolva, akkor a vifminfo.json fájlban is elmentésre kerülnek, így a következő indításkor is megmaradnak.
Ugrás egy könyvjelzőhöz: :bmgo példa. A mentett könyvjelzőinket a :bmarks paranccsal listázhatjuk, :delbmarks paranccsal pedig törölhetjük a már feleslegeseket.

A Vifm nagyon rugalmas a fájlok megjelenítésében, a :sort parancs segítségével a fájllistát különböző szempontok szerint (név, méret, dátum, kiterjesztés, stb.) rendezhetjük át, a választáshoz felugró "ablakot" kapunk.

A Vifm a fájltípusokhoz rendelt alkalmazások megnyitását is támogatja, ami a filetype és filextype parancsok révén történik. A filetype parancsok általánosak, míg a filextype lehetővé teszi a reguláris kifejezések használatát, így pl. egy adott mintájú fájlokhoz lehet külön asszociációt definiálni. Ezek a parancsok meghatározzák, hogy milyen program fut le, amikor egy fájlt megpróbálunk megnyitni a Vifmben. A filetype parancs általános fájlkiterjesztésekre vonatkozik, például: filetype *.jpg feh %f arra utasítja a Vifmet, hogy a JPEG képeket a feh képnézegetővel nyissa meg. Itt %f egy makró, amely kiterjed a kurzor alatti fájl teljes elérési útjára. A filextype hasonló, de reguláris kifejezéseket is használhat, ami nagyobb rugalmasságot kínál. Például, ha csak a /home/berus/ könyvtárban levő PDF fájlokat szeretnénk külön kezelni, akkor a filextype //^/home/berus/[^/]*\.pdf$// atril %f parancs használható. A sorrend itt is kritikus, a Vifm felsorolja a parancsokat, és a legelső, ahol a fájl neve illeszkedik, az kerül végrehajtásra.

Az egyéni parancsok (:command parancs) még rugalmasabb eszköz a külső parancsok integrálására. Ezek olyan rövidített parancsok, amelyek saját, összetett shell parancsot futtatnak le. Például, ha gyakran a lemezterület felhasználását szeretnénk ellenőrizni egy adott könyvtárban, akkor definiálhatunk egy :df parancsot: :command! df df -h %m. Itt %m a makró, amely kiterjed a jelenlegi panel aktuális könyvtárára.

A paraméterezés a makrók segítségével történik, amelyek különböző változókat tartalmaznak, amelyeket a Vifm kiterjeszt a parancs végrehajtása során. Ezek közül a legfontosabbak: * %f: a kijelölt fájlok teljes elérési útjának listája; * %c: a kurzor alatti fájl teljes elérési útja; * %d: a panel aktuális könyvtára; * %F, %C, %D: ugyanezek, de idézőjelekkel együtt, ami hasznos, ha a fájlnevek tartalmaznak szóközt; * %m: a jelenlegi panel aktuális könyvtára; * %a: összes kijelölt fájl elérési útja egy sorban, szóközzel elválasztva.
Ezeknek a makróknak a kombinálása lehetővé teszi igazán összetett parancsok létrehozását. Például egy :zip parancs, amely a kijelölt fájlokat egy ZIP archívumba csomagolja: :command! zip zip -r %c.zip %f. Itt a %c a kurzor alatti fájl neve lesz, amit a ZIP nevéül használunk, míg a %f a kiválasztott fájlok listája.

A rejtett fájlok, amelyek a Unix/Linux rendszerekben ponttal kezdődnek, alapértelmezetten nem jelennek meg a listában. A Vifm a za billentyűkombinációval vált a megjelenítési módok között (a zo és zm is használható de nehézkes).

Színsémák: a Vifm képes különböző terminálok palettájához igazodni, de a legjobb eredményhez 256-színű terminál ajánlott. A színsémákat .vifm kiterjesztésű fájlokban tároljuk, amelyek a ~/.config/vifm/colors/ könyvtárban helyezkednek el. A telepített színsémák közül a :colorscheme séma paranccsal választhatunk. A Vifm-ben alapértelmezettként szerepel egy Default-256 színséma, amely 256 színt támogató terminálokra lett kialakítva, míg 16-színű terminálok esetén az alapértelmezett a Default lesz.

Panelek kezelésére szolgáló parancsok: válthatunk függőleges és vízszintes felosztás között, :split és :vsplit parancsok, az :only pedig egypaneles megjelenítésre vált (a másik panel nem záródik be, Tab-bal tudunk váltani rá továbbra is).

Kereséshez használható parancsok: :locate mire gyors keresés az egész fájlrendszerben (locate adatbázis alapján); :find [minta] rekurzív keresés az aktuális könyvtárban (find parancs alapján); :grep [kifejezés] keresés a fájlok tartalmában (grep alapján); :filter [minta] szűri a fájlokat a megadott mintára (regex alapján, üres: szűrés kikapcsolása). Természetesen a vim-ben megszokot / metódus is működik (a fájlnevekben keres)!

Rendszer parancsok: :!parancs futtat egy shell parancsot (pl. :!ls -la); :shell elindít egy alárendelt shell-t; :suspend felfüggeszti a vifm-et (fg paranccsal folytatható).

Billentyűkötések (mappings) lehetővé teszik, hogy saját billentyűparancsokat definiáljunk a Vifm-ben (vifmrc), a különböző működési módokhoz is köthetjük őket. A parancsokat önmagukba kiadva megnézhetjük az aktuális kiosztásokat: :nmap normál mód, :vmap vizuális mód, :cmap parancssor mód, :viewmap nézet mód. Megkülönböztetünk rekurzív (pl. nmap) és nem rekurzív (pl. nnoremap) kötéseket, az utóbbi használata javasolt a legtöbb esetben, mert biztonságosabb, nem oldja fel újra a kötést. Hogy értsük: nmap j k és nmap k j parancsok végtelen ciklust okozhatnak, mert rekurzívan feloldják egymást. Kötés törlése az :unmap paranccsal történik.
A fontosabb kulcsnevek: <cr> Enter; <esc> Escape; <space> Szóköz; <tab> Tabulátor; <bs> Backspace; <del> Delete; <left>, <right>, <up>, <down> Iránybillentyűk; <f1> – <f12> Funkcióbillentyűk; <nop> letilt egy parancsot.
Néhány példa a saját kombinációimból: kijelölés space billentyűvel nnoremap <space> tj; összes kijelölése nnoremap * :%select<cr>; egyszeűbb kilépés nnoremap q ZQ, nnoremap Q ZZ. Ha elég lassúak vagyunk a billentyűparancsok kiadása közben, a Vifm súgót jelenít meg nekünk az inaktív panelban.

Fájl előnézetet az aktív panelban az lenyomásával kérhetünk (görgethető, kilépés q), ha a nem aktív panelban szeretnénk megjeleníteni w (nem görgethető, kilépés w).

A :compare paranccsal összehasonlíthatjuk a két panel tartalmát. Különböző színekkel jelöli (hogy milyenekkel az a színsémától függ) csak az aktív panelen, csak az inaktív panelen, mindkettőn, és a mindkettőn létező, de valamiben eltérő (pl. méret) fájlokat. Megadhatjuk hogy mit figyeljen az összehasonlításkor, size méret alapján dönt az azonosságról, mtime módosítási idő alapján, ctime változtatási idő alapján, inode inode szám alapján (ritkán hasznos), content nem hasonlítja össze a fájlok tartalmát, csak a metaadatokat; pl. :set compareoptions=size,mtime.

Kuka (set trash): a dd parancs valójában nem töröl (csak a DD), hanem a Vifm saját kukájába (~/.local/share/vifm/Trash, megváltoztatható, de nem javaslom, pl. set trashdir=~/.vifm-trash) mozgatja a fájlokat. A kuka tartalma az :lstrash paranccsal listázható, az :empty paranccsal üríthető. A fájlok visszaállíthatóak, ehhez navigáljunk a ~/.local/share/vifm/Trash könyvtárba, álljunk a fájlra és adjuk ki a :restore parancsot.

A Vifm-ben elvileg lehetséges előnézetet generálni a különböző képfájlokhoz, de mivel ennek sikeressége nagyban függ a kapcsolódó külső programok verziójától (ueberzug, sixel, stb.), ezért ezt most nem tárgyaljuk, mint ahogy az egyéb hekkeléseket sem, mint például az fzf integrálását.

Akkor elérkezett az idő, hogy megnézzük a vifmrc konfigurációs állományomat!

" vim: filetype=vifm :
" Berus konfigurációs fájl.
" Az idézőjel (") a sor elején megjegyzést jelöl.
" Az üres sorok figyelmen kívül maradnak.

" ------------------------------------------------------------------------------
" Fő beállítások
" ------------------------------------------------------------------------------

" Parancs, amivel fájlokat szerkesztünk különféle helyzetekben. Az alapértelmezett a vim.
" Ha más vi klónt szeretnél használni, például vis vagy vile,
" ezt a beállítást kell megváltoztatnod.
if executable('vim')
    set vicmd=vim
elseif executable('nvim')
    set vicmd=nvim
elseif executable('vis')
    set vicmd=vis
elseif executable('vile')
    set vicmd=vile
elseif $EDITOR != ''
    echo 'Megjegyzés: a(z) `'.$EDITOR.'` szerkesztőt használom'
    let &vicmd = $EDITOR
endif

" Ez arra készteti a vifm-et, hogy saját maga végezze a fájlműveleteket ahelyett,
" hogy a szabványos segédprogramokra (pl. `cp`) támaszkodna. Bár a `cp` és társai
" univerzálisabbak, nagy mennyiségű fájl esetén sokkal lassabbak, és nem
" támogatják a folyamat előrehaladásának mérését.
set syscalls

" Kuka könyvtár
" Alapértelmezés szerint a dd vagy :d paranccsal törölt fájlok a kukába kerülnek.
" Ha ezt megváltoztatod, nem tudod a fájlokat úgy áthelyezni, hogy kitörlöd őket,
" majd p-vel bemásolod az új helyre.
" Azt javaslom, hogy ezt addig ne módosítsd, amíg nem vagy otthon a vifm-ben.
set trash

" Mit mentsen automatikusan a vifm újraindításakor. Ha nem akarod,
" hogy a vifm megjegyezze az utoljára látogatott könyvtárakat,
" vedd ki a "savedirs" értéket.
set vifminfo=dhistory,chistory,state,tui,shistory,
            \phistory,fhistory,dirstack,registers,bookmarks,bmarks

" Ennyi könyvtárat tároljon a könyvtár-előzményekben.
set history=100

" Szimbolikus linkek automatikus feloldása l vagy Enter lenyomásakor.
set nofollowlinks

" Természetes rendezés (verziószámok a szövegben), könyvtárméret helyett elemek száma.
set sortnumbers
set dirsize=nitems

" A visszavonható változtatások maximális száma.
set undolevels=100

" Vim formátumú súgófájl használata (kiemelés és „hiperhivatkozások”).
" Ha inkább sima szöveges súgót szeretnél, állítsd be a novimhelp-et.
set vimhelp

" Ha szeretnéd, hogy futtatható fájlokat Enterrel, l-lel vagy Jobb nyíllal
" el tudj indítani, állítsd ezt be.
set norunexec

" A fájllistában megjelenő idő formátuma. Például:
" TIME_STAMP_FORMAT=%m/%d-%H:%M
" Részletekért lásd: man date vagy man strftime.
set timefmt='%Y/%m/%d %H:%M'

" Találatok listázása tab-kiegészítéskor parancssor módban
set wildmenu

" Kiegészítések megjelenítése felugró ablakban, leírással
set wildstyle=popup

" Javaslatok megjelenítése normál, vizuális és nézet módban kulcsokra,
" jelölőkre és regiszterekre (legfeljebb 5 fájl). Más nézetben is, ha elérhető.
set suggestoptions=normal,visual,view,otherpane,keys,marks,registers

" A keresési mintákban figyelmen kívül hagyja a kis- és nagybetű különbséget,
" kivéve, ha van bennük legalább egy nagybetű.
set ignorecase
set smartcase

" Ne emelje ki automatikusan a keresési találatokat
set nohlsearch

" Keresés gépelés közben (inkrementális keresés)
set incsearch

" Próbáljon kis távolságot hagyni a kurzor és a lista felső/alsó széle között
set scrolloff=4

" Rejtett fájlok megjelenítése
set dotfiles

" Ne végezzen túl sok lekérést lassú fájlrendszereken
if !has('win')
    set slowfs=curlftpfs
endif

" Egyedi állapotsor kinézet
set statusline="  Tipp: %z%= %A %10u:%-7g %15s %20d  "

" Színsémák listája (az első, amit a terminál támogat, kerül használatra)
colorscheme Default

" ------------------------------------------------------------------------------
" Könyvjelzők
" ------------------------------------------------------------------------------

" :mark jel /teljes/könyvtár/útvonal [fájlnév]

mark h ~/

" ------------------------------------------------------------------------------
" Parancsok
" ------------------------------------------------------------------------------

" :com[mand][!] parancsnév művelet
"
" Ezek a makrók használhatók a művelet részben:
"  %a – felhasználói argumentumok
"  %c – az aktuális fájl a kurzor alatt
"  %C – az inaktív panel kurzora alatti fájl
"  %f – kijelölt fájl(ok)
"  %F – az inaktív panel kijelölt fájlai
"  %b – ugyanaz, mint %f %F
"  %d – aktuális könyvtár neve
"  %D – inaktív panel aktuális könyvtárának neve
"  %r{x} – fájlok listája az {x} regiszterből
"  %m – a parancs menüablakban fut
"  %u – a parancs kimenetét fájllistaként használja
"  lásd `:help vifm-macros` és `:help vifm-filename-modifiers` továbbiakért

command! df df -h %m 2> /dev/null
command! diff vim -d %f %F
command! zip zip -r %c.zip %f
command! run !! ./%f
command! make !!make %a
command! mkcd :mkdir %a | cd %a
command! vgrep vim "+grep %a"
command! reload :write | restart full

" ------------------------------------------------------------------------------
" Fájltípus-társítások
" ------------------------------------------------------------------------------

" :filetype minta1,minta2 alapértelmezettprogram,program2
" :fileviewer minta1,minta2 konzolnézegető
"
" Az első bejegyzés az alapértelmezett program, ami a megfelelő fájlhoz tartozik.
" A fájltípushoz tartozó további programok a :file paranccsal érhetők el.
" A parancs makrók, mint %f, %F, %d, %D a parancsokban is használhatók.
" A %a makrót figyelmen kívül hagyja. Ha % jelet akarsz, akkor %% kell.
" Az alkalmazásnévben a szóközt escape-elni kell, pl.: QuickTime\ Player.app

" Automatizált FUSE csatolásokhoz regisztrálni kell egy kiterjesztést
" a következő formátumok egyikében:
"
" :filetype minták FUSE_MOUNT|mount_parancs %SOURCE_FILE %DESTINATION_DIR
"
" A %SOURCE_FILE és %DESTINATION_DIR futásidőben kerül kitöltésre.
"

" Pdf
filextype {*.pdf},<application/pdf> zathura %c %i &, atril %c, xpdf %c
fileviewer {*.pdf},<application/pdf> pdftotext -nopgbrk %c -

" PostScript
filextype {*.ps,*.eps,*.ps.gz},<application/postscript>
        \ {View in zathura}
        \ zathura %f,
        \ {View in gv}
        \ gv %c %i &,

" Djvu
filextype {*.djvu},<image/vnd.djvu>
        \ {View in zathura}
        \ zathura %f,
        \ {View in atril}
        \ apvlv %f,

" Audio
filetype {*.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus},
        \<audio/*>
       \ {Play using ffplay}
       \ ffplay -nodisp -autoexit %c,
       \ {Play using MPlayer}
       \ mplayer %f,
fileviewer {*.mp3},<audio/mpeg> mp3info
fileviewer {*.flac},<audio/flac> soxi

" Video
filextype {*.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
          \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
          \*.as[fx]},
         \<video/*>
        \ {View using ffplay}
        \ ffplay -fs -autoexit %f,
        \ {View using Dragon}
        \ dragon %f:p,
        \ {View using mplayer}
        \ mplayer %f,
fileviewer {*.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
           \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
           \*.as[fx]},
          \<video/*>
         \ ffprobe -pretty %c 2>&1

" Web
filextype {*.html,*.htm},<text/html>
        \ {Open with dwb}
        \ dwb %f %i &,
        \ {Open with firefox}
        \ firefox %f &,
        \ {Open with uzbl}
        \ uzbl-browser %f %i &,
filetype {*.html,*.htm},<text/html> links, lynx

" Object
filetype {*.o},<application/x-object> nm %f | less

" Man page
filetype {*.[1-8]},<text/troff> man ./%c
fileviewer {*.[1-8]},<text/troff> man ./%c | col -b

" Images
filextype {*.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm},<image/*>
        \ {View in sxiv}
        \ sxiv %f,
        \ {View in gpicview}
        \ gpicview %c,
        \ {View in feh}
        \ feh -FZ %d --start-at %d/%c 2>/dev/null,
fileviewer {*.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm},<image/*>
         \ identify %f

" OpenRaster
filextype *.ora
        \ {Edit in MyPaint}
        \ mypaint %f,

" Mindmap
filextype *.vym
        \ {Open with VYM}
        \ vym %f &,

" MD5
filetype *.md5
       \ {Check MD5 hash sum}
       \ md5sum -c %f %S,

" SHA1
filetype *.sha1
       \ {Check SHA1 hash sum}
       \ sha1sum -c %f %S,

" SHA256
filetype *.sha256
       \ {Check SHA256 hash sum}
       \ sha256sum -c %f %S,

" SHA512
filetype *.sha512
       \ {Check SHA512 hash sum}
       \ sha512sum -c %f %S,

" GPG signature
filetype {*.asc},<application/pgp-signature>
       \ {Check signature}
       \ !!gpg --verify %c,

" Torrent
filetype {*.torrent},<application/x-bittorrent> ktorrent %f &
fileviewer {*.torrent},<application/x-bittorrent> dumptorrent -v %c

" FuseZipMount
filetype {*.zip,*.jar,*.war,*.ear,*.oxt,*.apkg},
        \<application/zip,application/java-archive>
       \ {Mount with fuse-zip}
       \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR,
       \ {View contents}
       \ zip -sf %c | less,
       \ {Extract here}
       \ tar -xf %c,
fileviewer *.zip,*.jar,*.war,*.ear,*.oxt zip -sf %c

" ArchiveMount
filetype {*.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.tar.zst,*.tzst},
        \<application/x-tar>
       \ {Mount with archivemount}
       \ FUSE_MOUNT|archivemount %SOURCE_FILE %DESTINATION_DIR,
fileviewer *.tgz,*.tar.gz tar -tzf %c
fileviewer *.tar.bz2,*.tbz2 tar -tjf %c
fileviewer *.tar.xz,*.txz tar -tJf %c
fileviewer *.tar.zst,*.tzst tar -t --zstd -f %c
fileviewer {*.tar},<application/x-tar> tar -tf %c

" Rar2FsMount and rar archives
filetype {*.rar},<application/x-rar>
       \ {Mount with rar2fs}
       \ FUSE_MOUNT|rar2fs %SOURCE_FILE %DESTINATION_DIR,
fileviewer {*.rar},<application/x-rar> unrar v %c

" IsoMount
filetype {*.iso},<application/x-iso9660-image>
       \ {Mount with fuseiso}
       \ FUSE_MOUNT|fuseiso %SOURCE_FILE %DESTINATION_DIR,

" SshMount
filetype *.ssh
       \ {Mount with sshfs}
       \ FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR %FOREGROUND,

" FtpMount
filetype *.ftp
       \ {Mount with curlftpfs}
       \ FUSE_MOUNT2|curlftpfs -o ftp_port=-,,disable_eprt %PARAM %DESTINATION_DIR %FOREGROUND,

" Fuse7z and 7z archives
filetype {*.7z},<application/x-7z-compressed>
       \ {Mount with fuse-7z}
       \ FUSE_MOUNT|fuse-7z %SOURCE_FILE %DESTINATION_DIR,
fileviewer {*.7z},<application/x-7z-compressed> 7z l %c

" Office files
filextype {*.odt,*.doc,*.docx,*.xls,*.xlsx,*.odp,*.pptx,*.ppt},
         \<application/vnd.openxmlformats-officedocument.*,
          \application/msword,
          \application/vnd.ms-excel>
        \ libreoffice %f &
fileviewer {*.doc},<application/msword> catdoc %c
fileviewer {*.docx},
          \<application/
           \vnd.openxmlformats-officedocument.wordprocessingml.document>
         \ docx2txt.pl %f -

" TuDu files
filetype *.tudu tudu -f %c

" Qt projects
filextype *.pro qtcreator %f &

" Directories
filextype */
        \ {View in caja}
        \ caja %f &,

" Markdown
filetype *.md glow -p %c

" :filetype minták FUSE_MOUNT2|mount_parancs %PARAM %DESTINATION_DIR
"
" A %PARAM és %DESTINATION_DIR futásidőben kerül kitöltésre.
"
" Példa:
"   :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR
"
" A %PARAM értéke a fájl első sora, pl.: root@127.0.0.1:/
"
" A %CLEAR hozzáadható, ha képernyőtörlést szeretnél a FUSE program futtatása előtt.
" Létezik %FOREGROUND is, ami hasznos jelszóbekérésnél.

" ------------------------------------------------------------------------------
" Panelkonfigurációs példák
" ------------------------------------------------------------------------------

" Oszlopok testreszabása (levágott fájlnevek végére három pont)
" set viewcolumns=-{name}..,6{}.

" Függőleges elválasztó megjelenítése
" set fillchars=vborder:│

" Fordítási és ideiglenes fájlok kiszűrése
" filter! {*.lo,*.o,*.d,*.class,*.pyc,*.pyo,.*~}

" ------------------------------------------------------------------------------
" Billentyűtérképezési példák
" ------------------------------------------------------------------------------

" Shell indítása az aktuális könyvtárban
nnoremap s :shell<cr>

" Rendezési párbeszédablak
nnoremap S :sort<cr>

" Előnézeti ablak láthatóságának váltása
nnoremap w :view<cr>
vnoremap w :view<cr>gv

if $DISPLAY && executable('gvim')
    " Fájl megnyitása meglévő gvim példányban
    nnoremap o :!gvim --remote-tab-silent %f<cr>
    " Fájl megnyitása új gvim példányban
    nnoremap O :!gvim %f<cr>
endif

" Fájl megnyitása háttérben, alapértelmezett programmal
nnoremap gb :file &<cr>l

" Rendszer vágólappal való együttműködés
if has('win')
    " Az aktuális könyvtár útvonalának másolása Windows vágólapra, perjelekkel
    nnoremap yp :!echo %"d:gs!\!/! %i | clip<cr>
    " Az aktuális fájl útvonalának másolása Windows vágólapra, perjelekkel
    nnoremap yf :!echo %"c:gs!\!/! %i | clip<cr>
elseif $WAYLAND_DISPLAY
    if executable('wl-copy')
        " Könyvtár útvonal másolása elsődleges és kiválasztási vágólapra
        nnoremap yd :!echo -n %d | wl-copy %i &&
                    \ echo -n %d | wl-copy -p %i<cr>
        " Fájl útvonal másolása elsődleges és kiválasztási vágólapra
        nnoremap yf :!echo -n %c:p | wl-copy %i &&
                    \ echo -n %c:p | wl-copy -p %i<cr>
    endif
elseif $DISPLAY
    if executable('xclip')
        " Könyvtár útvonal másolása a vágólapra
        nnoremap yd :!echo %d | xclip %i<cr>
        " Fájl útvonal másolása a vágólapra
        nnoremap yf :!echo %c:p | xclip %i<cr>
    elseif executable('xsel')
        " Könyvtár útvonal másolása elsődleges és kiválasztási vágólapra
        nnoremap yd :!echo -n %d | xsel --input --primary %i &&
                    \ echo -n %d | xsel --clipboard --input %i<cr>
        " Fájl útvonal másolása elsődleges és kiválasztási vágólapra
        nnoremap yf :!echo -n %c:p | xsel --input --primary %i &&
                    \ echo -n %c:p | xsel --clipboard --input %i<cr>
    endif
endif

" Gyorsabb átnevezési billentyűk
nnoremap I cw<c-a>
nnoremap cc cw<c-u>
nnoremap A cw

" Mint fent, de a fájlkiterjesztés nélkül
" nnoremap I cW<c-a>
" nnoremap cc cW<c-u>
" nnoremap A cW

" Konzol nyitása az aktuális könyvtárban
if $DISPLAY && executable('xterm')
    nnoremap ,t :!xterm &<cr>
elseif $TERMINAL
    nnoremap ,t :!$TERMINAL &<cr>
endif

" Editor megnyitása a vifmrc szerkesztésére, majd beállítások újratöltése
nnoremap ,c :write | edit $MYVIFMRC | restart full<cr>

" gvim megnyitása a vifmrc szerkesztésére
if $DISPLAY && executable('gvim')
    nnoremap ,C :!gvim --remote-tab-silent $MYVIFMRC &<cr>
endif

" Sortörés váltása ,w gombbal
nnoremap ,w :set wrap!<cr>

" Példa klasszikus kétpaneles fájlkezelő billentyűkre (less helyett ov)
nnoremap <f3> :!ov %f<cr>
nnoremap <f4> :edit<cr>
nnoremap <f5> :copy<cr>
nnoremap <f6> :move<cr>
nnoremap <f7> :mkdir<space>
nnoremap <f8> :delete<cr>

" Midnight Commander-szerű billentyűk
" Aktuális könyvtár megnyitása a másik panelben
nnoremap <a-i> :sync<cr>
" Kurzornál lévő könyvtár megnyitása a másik panelben
nnoremap <a-o> :sync %c<cr>
" Panelek felcserélése
nnoremap <c-u> <c-w>x

" Berus billentyűkiosztás
" Rejtett fájlok
nnoremap zh za
" Kijelölés
nnoremap <space> tj
nnoremap ,m :mkdir<space>
" Egyszeűbb ugrás
nnoremap ű G
" Könyvjelzőhöz ugrás
nnoremap ú :bmgo<space>
" Összes kijelölése
nnoremap * :%select<cr>
" nnoremap * ggVG<cr>
" Egyszeűbb kilépés
nnoremap q ZQ
nnoremap Q ZZ

" ag/rg használata grep helyett
" set grepprg='ag --line-numbers %i %a %s'
set grepprg='rg --vimgrep'

" További hely hozzáadása a futtatható fájlok kereséséhez
" let $PATH = $HOME.'/bin/fuse:'.$PATH

" Bizonyos gyorsbillentyűk tiltása
" nnoremap <left> <nop>

" Az aktuális példány IPC nevének exportálása környezeti változóként,
" majd későbbi kommunikációhoz való használata.
"
" Például shell scriptben így:
"     vifm --server-name "$VIFM_SERVER_NAME" --remote +"cd '$PWD'"
"
" let $VIFM_SERVER_NAME = v:servername

" screen/tmux támogatás bekapcsolása
" screen!

" ------------------------------------------------------------------------------
" Ikon díszítések példa
" ------------------------------------------------------------------------------

" https://github.com/cirala/vifm_devicons

" Sorszámozás
set number

Szokásomhoz híven alaposan kommentelt, nem is magyaráznám túl, ha kérdés van vele kapcsolatban, akkor természetesen próbálok válaszolni (van néhány olyan alkalmazás a konfigban, amik nincsenek a tárolókban, pl. ov, glow, stb., ezeket vagy telepítjük, vagy értelemszerűen kiváltjuk mással).

Ahogy fentebb már céloztam rá, a Vifm-et mindenféle trükkökkel rá lehet venni mindenféle trükkökre, de mivel ezek sok mindentől függő dolgok, így nem kívánok velük foglalkozni! A stabil, megbízható működés bemutatása volt a cél, és a magam részéről kerülöm az ilyen megoldásokat (na jó, egy ssh mókolást én is mutattam korábban, a kivétel ami...)! Aki szeret kísérletezni, az saját felelősségre nyugodtan megteheti!
Némileg ehhez kapcsolódóan szeretném felhívni a figyelmet arra, hogy a különböző disztribúciók készítői előszeretettel adnak különféle foltokat a Vifm-hez (pl. Debian), ezért sajnos előfordulhat, hogy ami az egyik terjesztés által szállított Vifm-ben működik, az a másikban már nem megy... Például a kuka fentebb leírtak szerinti kezelése egy Debian folt, nem biztos, hogy minden disztribúció csomagkészítői átvették...

A program elképesztő mennyiségű lehetőséget kínál, tehát barátunk továbbra is a man, és a Vifm weboldalát is érdemes meglátogatni!

https://vifm.info/

Berus

Hozzászólások

Szia,

Értékelés: 

0
Még nincs értékelve

Szia,

Ez nagyon érdekes kis app. A lényeg, hogy könnyű. Én igazából Pi-n az DC-t használtam/használom, azonban ez relatív nehéz a Pi-nek. Aztán ott az MC, amit mostanság kezdtem felfedezni, tök jó, azonban nincsenek vagy én nem tudom (még) hogy kell beállítani előredefiniált könyvtárak, és nem tudok meghajtót váltani. Ez alatt azt értem, hogy fogom, rádugom és ahogy a rendszerben látom úgy nem látom a MC-ben.

Szóval ha új vagy akármilyen (fstab-n nem definiált) meghajtót teszek be, akkor DC, ha a megszokott akkor marad az MC. 

Itt a ViFM-ben látom a config file-ban lehet változtatni rengeteg mindent. Ami rögtön feltünt, hogy a billentyűzet osztás átállítható a "megszokott" DC vagy MC kiosztásra.

Örülök, hogy ismertetted/ismerteted. :)

Szia,

Értékelés: 

0
Még nincs értékelve

#1 Köszi a visszajelzést!

Igen, a legtöbb MC F(unkció) billentyű alapból elérhető, ami meg nem, azt könnyen beállíthatod, pl. átnevezés az F2-re: nnoremap <f2> cw. Ezzel együtt nem váltja ki teljesen az alapértelmezett Vifm parancsokat, mert pl. F5-el már létező fájlt másolsz, nem kérdez rá mit tegyen, hanem a "fájl már létezik" hibát kapsz...

Változók ellenőrzése

Értékelés: 

0
Még nincs értékelve

Ha újabb verziójú Vifm-et futtatunk, lehet hogy kapunk egy figyelmeztetést, hogy elavult a konfigurációs állományunk!

A változók ellenőrzése módosult, pl.:  elseif $DISPLAY forma helyett elseif $DISPLAY != '' formában kell megadni!