Vim/Konfiguracja
Vim jest programem, który w dużym stopniu można dostosować do potrzeb użytkownika. Standardowo edytor korzysta z pliku konfiguracyjnego, wczytywanego podczas uruchamiania programu, który znajduje się zazwyczaj w katalogu domowym użytkownika. W zależności od systemu operacyjnego, z jakiego korzystamy, jego lokalizacja i nazwa mogą się różnić:
Unix $HOME/.vimrc OS/2 $HOME/.vimrc lub $VIM/.vimrc (lub _vimrc) MS-DOS and Win32 $HOME/_vimrc lub $VIM/_vimrc Amiga s:.vimrc lub $VIM/.vimrc Haiku $HOME/config/settings/vim/vimrc
W większości przypadków będziemy edytować plik konfiguracyjny ręcznie, za pomocą naszego ulubionego edytora. W przypadku, gdy pliku brakuje, możemy go wygenerować z poziomu programu. Mamy do dyspozycji kilka komend, które temu służą:
:mk nazwapliku (1) :mkexrc nazwapliku (2) :mkexrc! nazwapliku (3) :mkv nazwapliku (4) :mkvimrc nazwapliku (5) :mkvimrc! nazwapliku (6)
Powyższe komendy zapiszą wszystkie ustawienia (:set) i mapowane klawisze (:map) do pliku konfiguracyjnego o nazwie nazwapliku, w aktualnej lokalizacji. Oczywiście, zamiast samej nazwy pliku można podać całą ścieżkę. Jeżeli nie podamy żadnej nazwy pliku, ustawienia zostaną zapisane do domyślnej lokalizacji jako plik o domyślnej nazwie, które to zależą od danego systemu operacyjnego (patrz wyżej). Komendy (1),(2),(3) tworzą plik konfiguracyjny typu .exrc, czyli zgodny i charakterystyczny dla poprzednika Vim, Vi. Kolejne komendy, (4),(5),(6), tworzą plik typu .vimrc, czyli charakterystyczny i zgodny z Vim. Wszystkie komendy poza (3) i (6) utworzą plik pod warunkiem, że jeszcze nie istnieje. Dodanie !, jak to jest w komendach (3) i (6), powoduje nadpisanie pliku, w przypadku, gdy już istnieje.
Opcje, które nie są zapisywane za pomocą tych funkcji:
- 'columns', 'endofline',
- 'fileformat', 'key', 'lines', 'modified', 'scroll', 'term', 'textmode',
- 'ttyfast' i 'ttymouse' nie są włączone do zapisu, ponieważ zależą od terminala lub pliku.
Zauważ, że opcje 'binary', 'paste' i 'readonly' są włączone, co nie zawsze jest pożądane.
Wszystkie ustawienia funkcji w programie, zarówno dotyczące wyglądu jak i jego działania, można wprowadzać w trybie Linii Komend oraz w trybie Ex. Opcje wprowadzone do programu w czasie jego działania będą obowiązywać tylko do momentu jego wyłączenia, po czym zostaną utracone. Zapobiec temu możemy zapisując zmiany do pliku konfiguracyjnego.
Zaczynamy
[edytuj]W tej części postaramy się wypolerować trochę działanie Vima, zmieniając jego plik konfiguracyjny. Będziemy się wzorować na działaniu większości edytorów.
W Linuksie plik taki powinien zostać utworzony w katalogu domowym użytkownika i mieć nazwę .vimrc. W Windowsie, natomiast, o nazwie _vimrc (sprawdzić dokładnie). Linie pliku zaczynające się od cudzysłowu są komentarzami. Można także w połowie linii zacząć komentarz, jednak nie zawsze ten sposób będzie działał (wówczas przenosimy komentarz do nowej linii). Poniższy tekst można bezpośrednio wkleić do pliku konfiguracyjnego Vima.
scriptencoding utf-8 " kodowanie znakow uzyte w pliku konfiguracyjnym " przydatne jesli chcemy miec polskie znaki. inne kodowania to np. cp1250, lub iso-8859-2 " lista dostepnych kodowan jest dostepna w vimie " :he encoding-names """"""""""""""""""""""" map <F10> :source $VIMRUNTIME/twoja_nazwa.vim " powyzsze ustawienie powoduje wczytanie pliku konfiguracyjnego z katalogu " C:\Program Files\Vim\vim70 w systemie Windows " pod *nixami każdy powinien wiedzieć jak to ustawić """"""""""""""""""""""" " Automatyczna zmiana katalogu do tego, w ktorym jest aktualnie edytowany plik. """"""""""""""""""""""" " Przydatne gdy chcemy otworzyc inny z tego samego katalogu " http://vim.sourceforge.net/tip_view.php?tip_id=101 if has("autocmd") autocmd BufEnter * :cd %:p:h endif " has("autocmd") " mozna tez uzyc set acd, ale ta opcja nie dziala z pewnymi wtyczkami, zobacz :he acd """"""""""""""""""""""" set nobackup " vim nie bedzie zostawial kopii zapisywanych plikow set nowritebackup " ani tworzyl ich podczas edycji """"""""""""""""""""""" " przy zawinietych liniach (set wrap) przechodzenie miedzy liniami " bedzie dzialalo jak w wiekszosci edytorow " (przdaloby sie wylaczyc to dla Shift-V) " http://vim.wikia.com/wiki/Move_cursor_by_display_lines_when_wrapping nnoremap j gj nnoremap k gk vnoremap j gj vnoremap k gk nnoremap <Down> gj nnoremap <Up> gk vnoremap <Down> gj vnoremap <Up> gk inoremap <Down> <C-o>gj inoremap <Up> <C-o>gk """"""""""""""""""""""" " kodowanie """"""""""""""""""""""" set fencs=iso-8859-2 " ustawia zapisywanie wszystkich nowych plikow w danym kodowaniu " " w systemie windows lepiej to wylaczyc (brak iconv) i sciagnac sterownik klawiatury iso z adresu " http://windows.online.pl/klawiat.htm oraz ustawic czcionke na czcionke iso " Moze to byc darmowa czcionka w formacie TrueType http://web.archive.org/web/20061031005750/http://windows.online.pl/pliki/pols2.zip " lub bitmapowa http://web.archive.org/web/20060910163453/http://windows.online.pl/pliki/pols1.zip " Inne czcionki iso: " http://nl.ijs.si/gnusl/cee/iso8859-2.html " lub szukaj na google: latin 2 fonts " aby ustawic na stale w gvimie (gui vim) nalezy wybrac ja z menu a potem " wpisac w gvimie :set gfn? " otrzymany napis skopiowac do pliku konfiguracyjnego _vimrc np. " set guifont=Courier_N_CE_/_Latin_2:h10:cEASTEUROPE " aby skopiowac napis z konsoli msdos nalezy przejsc do menu okna, kliknac edycja --> zaznacz, " zaznaczyc co nas interesuje i wcisnac enter " teraz w innym programie mozemy wkleic tekst " " wiecej o windows, vim i iso: " http://www.linuxfan.pl/dyskusje/pcol.2003/04.2003/6682.php3 " http://www.linuxfan.pl/dyskusje/pcol.2002/07.2002/3660.php3 """"""""""""""""""""""" set mouse=a " mysz dziala wszedzie przy zaznaczaniu, wklejaniu set nu " lub set number, wlacza numerowanie wierszy " klawisz F2 ustawiamy jako przelacznik wyswietlania linii map <F2> :set number!<Bar>set number?<CR> imap <F2> :set nu!<CR> " potrzebne aby dzialalo takze w trybie wstawiania set is " lub set incsearch, przeskakuje do znajdywanych ciagow przy szukaniu / lub ? set nohls " wylacza podswietlanie znalezionych ciagow colo morning " ustawia schemat kolorow na poranny " wiecej na :he colo """"""""""""""""""""""" set paste " ustawilismy ze wklejany tekst nie bedzie automatycznie wcinany """"""""""""""""""""""" set wrap " zawijanie linii wlaczone set textwidth=0 " ustawia dlugosc linii na zero, nie bedzie automatycznie robil wciec set splitbelow " polecenie :sp umieszcza nowe okno pod aktywnym set splitright " polecenie :vs umieszcza nowe po prawej stronie aktywnego set wildmode=longest,list "wyswietla liste mozliwosci przy dopasowaniu, oraz dopasowuje najdluzsze """"""""""""""""""""""" "latwiejsze wciecia zaznaczenia pod klawiszem > lub < vnoremap > >gv vnoremap < <gv """"""""""""""""""""""" " wcinanie tylko tabem """"""""""""""""""""""" set tabstop=3 set shiftwidth=3 set noexpandtab set lcs=eol:\ ,tab:·\ ,trail:@ " opcja lcs to skrot od listchars. Ustawienie >>tab:'\ << powoduje ze bedziemy widziec " poczatkowy znak tabulatora, a nastepne ktore zajmuje beda spacjami. " Aby otrzymac kropke posrodku Ctrl+k .M " spacja to ukosnik i spacja " http://vim.wikia.com/wiki/Highlight_unwanted_spaces " przydatne przy programowaniu " " aby wciac caly tekst: gg=G """"""""""""""""""""""" " obsluga kart (zakladek) """"""""""""""""""""""" " Dotyczy plikow otwieranych przez przeciagnięcie lub :e nazwa pliku na Windows XP " zrodlo: http://www.nabble.com/tablines-on-Windows-t1365085.html """"""""""""""""""""""" " Nie lam slow w srodku set linebreak " Pokaz niekompletne paragrafy nawet jesli nie mieszcza sie na ekranie (unikniemy znakow @) set display+=lastline " klawisze kierunkowe i inne przekrocza granice linii set whichwrap=b,s,<,>,h,l """"""""""""""""""""""" " http://vim.wikia.com/wiki/Best_Vim_Tips map <F11> :set hls!<Bar>set hls?<CR> map <F10> :set paste!<Bar>set paste?<CR> map <F9> :set wrap!<Bar>set wrap?<CR> """"""""""""""""""""""" autocmd VimEnter * tab all autocmd BufAdd * exe 'tablast | tabe "' . expand( "<afile") .'"' """"""""""""""""""""""" " evaluate line in bash function Eval_line( ) :let start=line( '.' ) :exe "!eval" getline(start) endfunction map <F3> :call Eval_line() """"""""""""""""""""""" if has("autocmd") " zrodlo: http://people.smu.edu/jrobinet/howto/customize-vim.asp " Wykrywanie typu pliku i wlaczenie domyslnych ustawien jak długosc linii, wciecia " Rowniez ladownie plikow wciec aby robic automatyczne wciecia zaleznie od jezyka programowania filetype plugin indent on " Wrzucenie ponizszych linii do augrupy aby mozna bylo latwo usuwac pozniej augroup vimrcEx " Podczas edycji pliku zawsze przeskakuj do ostatniej znany pozycji kursora. " Nie rob tego gdy pozycja jest bledna lub gdy wewnatrz uchwytu zdarzenia " (zdarza sie podczas upuszczania pliku na gvim). autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g`\"" | \ endif augroup END else set autoindent " zawsze wlacz autowcinanie endif " has("autocmd")
linia poleceń w Linuksie w stylu vi
[edytuj]shopt -o vi
Od teraz nawigacja po linii komend jak w vi. Zobacz inne opcje
shopt -o
Zobacz także
[edytuj]http://www.linode.com/wiki/index.php/Vim_Tutorial
http://www.ashberg.de/vim/vimrc.html
http://www.linode.com/wiki/index.php/Vim_Tutorial
http://www.vi-improved.org/vimrc.php
Do zrobienia
[edytuj]W przygotowaniu: Wyjaśnienie mapowanie klawiszy, omap, noremap itp. http://ianua.initd.org/vimit/vim63/html/map.html#map-overview
<rofro> what's Operator-pending mode for mapping? <shl> rofro: when you type d, it waits for another key, while it does that, it's Operator-pending <rofro> shl, when it is used for mapping? could you give some example? <shl> lets say you want to make dw delete up to the space instead of deleting the space as well, you would do :omap w e <shl> you are remapping the w, it will work for dw, cw, yw, etc (map w when there is another character in front)
you can't use omap to implement new text objects |