[+] VIM, automatyczne dopisywanie nawiasów

Potrzebujesz pomocy z C, C++, perl, python, itp.
Czocher
Beginner
Posty: 140
Rejestracja: 26 maja 2007, 23:19

[+] VIM, automatyczne dopisywanie nawiasów

Post autor: Czocher »

Zauważyłem, w którymś IDE do Javy (bodajże Eclipse) bardzo przyjemną funkcję. Otóż, gdy dajmy na to napisałbym:

Kod: Zaznacz cały

jakąś_tablicę[
edytor automatycznie dopisywał brakujący drugi nawias "]". Tak samo przy innych typach nawiasów.
Oczywiście samo takie dopasowanie w vimie sprowadza się do napisania:

Kod: Zaznacz cały

imap ( ()<Esc>ha
imap [ []<Esc>ha
imap { {<CR>}<C-O>O
Jednak taka konfiguracja jest o tyle nieprzyjemna, że przykładowo jak mamy następujący przypadek:

Kod: Zaznacz cały

jakaś_tablicaXindeks]
Gdzie kursor jest w miejscu oznaczonym "X" to wstawiając tam nawias zrobi nam się:

Kod: Zaznacz cały

jakaś_tablica[]indeks]
A oczywiście lepiej by było gdyby wynik był następujący:

Kod: Zaznacz cały

jakaś_tablica[indeks]
Stąd mam następujące pytanie, jak dałoby się, z użyciem przykładowo funkcji skoku do parzystego nawiasu "%" zrobić sprawdzenie, czy nie ma nawiasu zamykającego, jeżeli jest to automatycznie wpisuje tylko otwierający, natomiast w przypadku braku zamykającego wpisuje oba?
Z góry dziękuję za wszelką pomoc.

Edycja:
No cóż, poradziłem sobie jakoś.
Proszę, oto brzydki gotowiec dla leniwych:

Kod: Zaznacz cały

" Automatyczne dopełnianie nawiasów
imap  ( (<Esc>:call Nawias()<CR>a
imap  [ [<Esc>:call Nawias()<CR>a
imap  { {<Esc>:call Nawias()<CR>a

function! Nawias()
  execute "normal %"
  let zmienna = getline(".")[col(".") - 1]
  if zmienna == '['
    execute "normal a]"
  endif
  if zmienna == '('
    execute "normal a)"
  endif
  if zmienna == '{'
    execute "normal a}"
  endif
  execute "normal %"
endfunction
ODPOWIEDZ