Vim dla Mechawojownika

Ciekawostka. Patch dla Mechwarrior 2 Mercenaries zawiera plik BAT ze znajomymi komendami:

@echo off
REM ~ $Id$
echo Welcome to my sad excuse for a search-and-replace patcher.
REM ~ **** **** **** MW2SND.CFG **** **** ****
REM ~ Make backup of it.
copy mw2snd.cfg mw2snd.cfg.backup > NUL
REM ~ Create vesa768.dll for 1024x768 to work.
echo Figure this one out! > vesa768.dll
REM ~ Brute force: replace mcga.dll and vesa480.dll in mw2snd.cfg.
echo :%%s/mcga.dll…/vesa768.dll/i > sub.script
echo :%%s/vesa480/vesa768/i >> sub.script
echo :w!>> sub.script
echo :q >> sub.script
vim -b -s sub.script mw2snd.cfg
REM ~ **** **** **** MERCSWIN.EXE **** **** ****
REM ~ Make backup of it.
copy mercswin.exe mercswin.exe.backup > NUL
REM ~ Again, brute force rules.
echo :%%s/gdi32.dll/gdi42.dll/i > sub.script
echo :w! >> sub.script
echo :q >> sub.script
vim -b -s sub.script mercswin.exe
REM ~ **** **** **** MW2SHELL.DLL **** **** ****
REM ~ Make backup of it.
copy mw2shell.dll mw2shell.dll.backup > NUL
REM ~ Again, brute force rules.
echo :%%s/gdi32.dll/gdi42.dll/i > sub.script
echo :%%s/advapi32.dll/advapi42.dll/i >> sub.script
echo :w!>> sub.script
echo :q >> sub.script
vim -b -s sub.script mw2shell.dll
REM ~ **** **** **** MERCSW.DLL **** **** ****
REM ~ Make backup of it.
copy mercsw.dll mercsw.dll.backup > NUL
REM ~ Again, brute force rules.
echo :%%s/advapi32.dll/advapi42.dll/i > sub.script
echo :w!>> sub.script
echo :q >> sub.script
vim -b -s sub.script mercsw.dll
REM ~ All done.
:all_done_ttfn
del sub.script
echo All done, TTFN.

Okazuje się, że w archiwum z łatką jest między innymi plik vim.exe i w taki właśnie sposób aktualizowana jest gra. Bardzo ciekawe rozwiązanie.

Mój vimrc

Tak tak, nadszedł wreszcie ten wielki moment, kiedy księga zostanie rozpieczętowana, a ludzkość pogrąży się w ciemności i rozpaczy. VIMRC!

$ cat .vimrc 
python from powerline.vim import setup as powerline_setup
python powerline_setup()
python del powerline_setup
set laststatus=2
set t_Co=256

language messages C
syntax on
set showmatch
set number
set showcmd
set ruler
set confirm
set expandtab
set shiftwidth=2
set softtabstop=2
set autoindent
map < F2 > :write % < CR >
map < F3 > :!bash % < CR >
map < F4 > :!python3 % < CR >
map < F5 > :tabp 
map < F6 > :tabn 
map < F7 > :%s///g
au BufEnter,BufRead *sh setlocal smartindent cinwords=case,do,if,elif,else,for,function,select,then,until,while
au BufEnter,BufRead *py setlocal smartindent cinwords=class,def,if,elif,else,except,for,try,while

Jak widać nie potrzebuję niczego bardzo zaawansowanego. Nie używam żadnych dodatków, po prostu potrzebuję programu, którego bez problemu odpalę na każdej możliwej wirtualce. Szczerze mówiąc odpuściłem już mozolne wybieranie i konfigurowanie perfekcyjnego IDE, bo nie ma takiego. Vim działa i to mi wystarczy.
Linijki map < F2 (oraz CR) > … nie wymagają wpisywania spacji pomiędzy znaczniki tagów, a klawisze funkcyjne. WordPress nie wie o co chodzi i interpretuje je jako znaki html, więc musiałem je dopisać, żebyście zobaczyli który klawisz zmapowałem do której funkcji.

Upiększamy terminal z powerline

Masz już ustawione wszystkie kolorki w gnome-terminlu? Okno wyświetla już idealny font, a kursor pomryguje zawadiacko, czekając na rm -rf?  Jak to mówią: „no to se jeszcze poczeka,”, bo przed nami trochę pracy.

Powerline to program-nakładka na stare dobre PS1, czyli ciąg znaków, w którym terminal informuje o bieżącym katalogu, numerze IP, zalogowanym użytkowniku, itd… Zwykłem oczywiście modyfikować ów znak zachęty, ale na dobrą sprawę ograniczało się to jednak do kolorowania nazwy użytkownika, żeby się nie myliło.  Zaczytałem o Powerline na blogu Fedory i w głowie miałem tylko „właśnie tego mi brakowało”.

Jak to działa? Po instalacji nie zobaczysz żadnej różnicy, dopóki w bashrc (czy bash_profile) nie dopiszesz kilku linijek:

if [ -f `which powerline-daemon` ]; then
powerline-daemon -q
POWERLINE_BASH_CONTINUATION=1
POWERLINE_BASH_SELECT=1
. /usr/share/powerline/bash/powerline.sh
fi

 

Kiedy teraz na to patrzę widzę, że klauzula if nie jest mi potrzebna, bo nie loguję się zdalnie, ale jak już jest, to niech zostanie. Domyślne zachowanie powerline to wyświetlanie loginu użytkownika na niebieskim tle i dodanie ładnego paska zamiast oddzielania wszystkiego spacjami.

terminal-powerline2

Ładnie i praktycznie zarazem. Sytuacja oczywiście nie wygląda tak różowo w czystej konsoli, prompt minimalnie się krzaczy, ale jest w dalszym ciągu czytelny i w tym przypadku to jest najważniejsze. Najlepsze zostawiłem na koniec: powerline zawiera rozszerzenie do vima, więc warto upiększyć również jego.

terminal-powerline3

I weź tu teraz człowieku używaj Emaksa. 🙂 Podobnie jak w przypadku shella, tu również wystarczy krótka informacja do .vimrc:

python from powerline.vim import setup as powerline_setup
python powerline_setup()
python del powerline_setup
set laststatus=2
set t_Co=256

 

Ciąg dalszy nastąpi…