Dec. 5th, 2009

VIM*Plus

Dec. 5th, 2009 09:12 pm
egorius: (Default)

Сегодня будем дружить Vim c SQL*Plusом. Для этого нам понадобится сущая безделица, такая вот функция:

function! SqlPlus()
   let l:fname = @%
   let l:sqlbuf = bufnr("%")
   if !exists("b:oraext_conn")
     let b:oraext_conn = ""
   endif
   let b:oraext_conn = input("Connect string: ",b:oraext_conn)
   echo "Executing..."
   let l:cmd = ":%! sqlplus ".b:oraext_conn." @".shellescape(l:fname)
   if !exists("b:oraext_resbuf") || !bufexists(b:oraext_resbuf) || bufwinnr(b:oraext_resbuf) == -1
     new
   else
     exe bufwinnr(b:oraext_resbuf)."wincmd w"
     if &modified
       new
     else
       exe "normal ggdG"
     endif
   endif
   exe l:cmd
   setlocal nonu
   set nomodified
   set efm=%-Poraext:\ fname=%f,%A%l/%c%m,%C%\\t%m
   cgetexpr ["oraext: fname=".fnameescape(l:fname)] + getline(1,'$')
   let l:resbuf = bufnr("%")
   exe bufwinnr(l:sqlbuf)."wincmd w"
   let b:oraext_resbuf = l:resbuf
   cc
   redrawstatus
endfunction

Небольшой комментарий_к. Допустим, сочиняем мы PL/SQL-пакет (кстати, на картинке видно, как мой плагин подсвечивает if, на котором стоит курсор):

Чтобы прогнать пакет через Плюс, говорим :call SqlPLus(). Естественно, это не надо набирать каждый раз. Во-первых, в ex-режиме (после нажатия двоеточия) работают стрелки вверх-вниз по истории команд, а также автокомплишн по табуляции, как в шелле. Во-вторых, можно просто повесить эту команду на какую-нибудь кнопку.

Первый раз у нас спросят строку соединения. Затем, после небольшой паузы, появится окошко с Плюсовым выводом. Если были ошибки, курсор будет позиционирован на первой из них, а командами :cn и :cp можно перемещаться к следующей или предыдущей (это vimовская фича™ quickfix, :help quickfix).

А что ещё надо от IDE? Самую малость: в следующий раз буду дружить Vim со своей OCI-программой, чтобы прямо из редактора выполнять запросы.

P. S. Кстати, вот отличная статья на тему продвинутых® IDE и удовольствия от кодирования™: Does Visual Studio Rot the Mind?

Profile

egorius: (Default)
egorius

March 2025

M T W T F S S
      1 2
34 567 89
1011 121314 1516
17181920212223
24252627 28 29 30
31      

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 29th, 2025 06:41 pm
Powered by Dreamwidth Studios