Vim/Konfiguracja

Z Wikibooks, biblioteki wolnych podręczników.
< Vim

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]