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

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.

Spis treści

[edytuj] Zaczynamy

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łowia 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 kopi 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)
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://windows.online.pl/pliki/pols2.zip
" lub bitmapowa 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 list
set lcs=tab:'\  " ukosnik i spacja
" opcja lcs to skrot od listchars. Ustawienie >>tab:'\ << powoduje ze bedziemy widziec
" poczatkowy znak tabulatora, a nastepne ktore zajmuje beda spacjami.
" przydatne przy programowaniu
"
" aby wciac caly tekst: ggvG  =
" aby przeformatowac caly tekst: ggvG gq

"""""""""""""""""""""""
" 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()

[edytuj] linia komend w Linuksie w stylu vi

shopt -o vi

Od teraz nawigacja po linii komend jak w vi. Zobacz inne opcje

shopt -o

[edytuj] Zobacz także

pliki konfiguracyjne nadesłane przez użytkowników na dotfiles.com

http://www.linode.com/wiki/index.php/Vim_Tutorial

http://ciaranm.org/files/vimrc

http://www.ashberg.de/vim/vimrc.html

http://www.linode.com/wiki/index.php/Vim_Tutorial

http://www.vi-improved.org/vimrc.php

[edytuj] Do zrobienia

Do zrobienia Do zrobienia:
Wyjaśnienie mapowanie klawiszy, omap, noremap itp.

http://ianua.initd.org/vimit/vim63/html/map.html#map-overview

 :omap (Operator-pending)
 :help Operator-pending

<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)

he text-objects

you can't use omap to implement new text objects