Добро пожаловать!

Я Дож, программирование — моё хобби. По мере того, как я осваиваю что-то новое, стараюсь об этом написать пост.
На текущий момент в блоге затронуты следующие темы: vim, free pascal, lisp, forth, m4
Занимаюсь разработкой своего языка под названием DEmbro, подбробней: wiki и svn
Для постов, не связанных с программированием, у меня есть отдельное жж.

февраля 28, 2010

Обновил дизайн

Теперь на странице ничего лишнего и все влезает.


Читать дальше......

ctags (1)

Vim изначально не понимает языковых конструкций, поэтому не получиться эффективно бегать по исходному коду. Чтобы это исправить, существует утилитка ctags, которая экспортирует информацию о коде в отдельный файл, который понимает vim. Возможностей работы с тегами в vim'е много, поэтому за один день я со всем разобраться не смог, так что процесс растянется на несколько дней.

К сожалению, ctags очень плохо поддерживает паскаль, - видит только функции и процедуры, да и то кажется не видит их у дженериков.

Итак, я добавил себе в редактор окошко слева со структурой кода:



Качаем утилитку ctags отсюда, кидаем ее куда-нибудь в хорошее место. Далее, качаем плагин taglist. Кидаем содержимое doc себе в vimfiles\doc, а содержимое plugin соответственно в vimfiles\plugin. Теперь в _vimrc прописываем путь до ctags:

" for plugin taglist
let Tlist_Ctags_Cmd='"c:\prog\ctags\ctags.exe"'


Все, плагин готов к употреблению. То самое окошко со структурой открывается и закрывается командой
:TlistToggle
. На этом его возможности не ограничиваются, и об остальных можно почитать хелп.

Для настройки хелпа нужно проделать следующее. Переходите в директорию vimfiles\doc\, открываете taglist.txt, вводите команду
:helptags .

Выходите. Теперь работает хелп
:help taglist.txt


Читать дальше......

февраля 25, 2010

Level up - Cygwin (1)

Сегодня понял, что пора учиться автоматизировать работу с большими группами файлов. Для этого нужны команды более продвинутые, чем изначально есть под виндой.

Решил установить Cygwin - эмулятор линукса под виндой, в первую очередь эмулирует bash. Чем он хорош - тем, что можно без проблем применять большинство статей о линуксе, рассказывающих как проделать то-то и то-то. Я-то человек ленивый, и сам копаться в настройках не очень люблю.

Как только я поставил cygwin, появилась проблема запуска бат-файлов - cygwin не понимает как этого делать. Проблема решается искусственным запуском cmd:

[Дож@test ~]# cmd /c some.bat


Кроме того, запуск многих прог блокирует cygwin до завершения работы программ. Чтобы избежать этого, следует пользоваться командой run
[Дож@test ~]# run bds temp.dpr

(этой строкой я запускаю дельфи).

К счастью, все программы из переменной окружения PATH, сразу видны из cygwin'а и потому все, что компилилось раньше, компилится и сейчас. Редактор gvim благополучно запускается. Так что я думаю, что мы подружимся.


Читать дальше......

TortoiseSVN из командной строки

При всем моем уважении к командной строке, TortoiseSVN по своей наглядности не заменяем ни одним консольным клиентом.

Но даже и TortoiseSVN можно запускать из консоли, избегая контекстное меню, вызовом

TortoiseProc /command:сюда имя команды /path:сюда путь для которого выполнить команду

для директории, либо
TortoiseProc /command:сюда имя команды /pathfile:сюда путь до файла для которого выполнить команду

для файла. В частности, вот две самые частоиспользуемые команды
TortoiseProc /command:update /path:"d:\proj\svn"
TortoiseProc /command:commit /path:"d:\proj\svn"

Я создал два bat-файла c этими действиями и раскидал по нужным мне директориям. Каждый раз переписывать в этих бат-файлах значение переменной /path: не хочется, к счастью, можно воспользоваться возможностями бат-файла. А именно, не вдаваясь в подробности, %~dp0 возвращает текущую директорию. Поэтому udate.bat и commit.bat окончательно выглядят так:
TortoiseProc /command:update /path:"%~dp0"

TortoiseProc /command:commit /path:"%~dp0"



Кроме того, гораздо удобнее не переходя к командной строке, а прямо из редактора (имею ввиду vim, под которым все делаю) горячими клавишами коммитить и апдейтить. Я выбрал клавиши F3 и F4 и прописал для них следующие две строки в _vimrc:
map <F3> :!<нужная директория>\commit.bat<CR>
map <F4> :!<нужная директория>\update.bat<CR>


Конечно, это не гибкое решение, так как не получится команды использовать из двух проектов, впрочем мне это и не надо. Если такое необходимо, то можно проделать следующее: 1) запускать TortoiseProc прямо для текущей директории (в которой открыт vim) - мне этого явно недостаточно 2) написать функцию setsvn, которая будет ставить директорию, для которой запускать TortoiseProc - мне это делать явно влом.

Так же стоит посмотреть в сторону всяких плагинов под вим, облегчающих работу с свн, например этот
vcscommand.vim

У приведенных выше маппингов есть недостаток, даже два: после выполнения манипуляций с свн потребуется дважды нажать на Enter (в cmd и vim). Этого можно избежать, переписав команды менее наглядным образом
map <F3> :!start cmd /c <нужная директория>\commit.bat<CR><CR>
map <F4> :!start cmd /c <нужная директория>\update.bat<CR><CR>


Подробнее можно почитать тут: Автоматизация TortoiseSVN.


Читать дальше......

февраля 21, 2010

Лесенка

Взято из реального проекта


  TDialogScreenSettings = class(TDialog)
  protected
    AvailableModes : array of TIntSize;
    Pages : TGUIN4_PageControl;
    FWindow : TGUIN4_Window;
    VideoPage : TGUIN4_Page;
    ScreenModes : TGUIN4_ComboBox;
    VsyncCheckBox : TGUIN4_CheckBox;
    ShowFPSCheckBox : TGUIN4_CheckBox;
    FullScreenCheckBox : TGUIN4_CheckBox;
    AntialiasingCheckBox : TGUIN4_CheckBox;
    procedure OnClose(Sender : TGUI_Control);
    procedure OnBtnCancel(Sender : TGUI_Control);
    procedure OnBtnOk(Sender : TGUI_Control);
    procedure OnShow; override;
    procedure OnHide; override;
    procedure OnCreate; override;
    procedure OnDestroy; override;
  end;


Читать дальше......

февраля 12, 2010

Команды с паттернами

:%s/doj/visualdoj/g

Заменяет все вхождения doj в файле на visualdoj. Если убрать g на конце, то действие в каждой строке будет сделано не более одного раза. Удобно при рефакторинге.
:g/\cdoj/nu

Выведет на экран все строки, содержащие doj. Если убрать \c перед doj, то получим поиск с учетом регистра.
:v/doj/d

Удалит все строки файла, кроме тех, которые содержат doj. Удобно если у вас есть лог-файл, из которого нужно выделить какую-то определенную инфу.

Помощь:

:help :s
:help pattern
:help :g


Читать дальше......

Я немного подзабил

Но возобновляюсь. Посты теперь будут короткими в несколько строчек, описывающие какую-нибудь небольшую фитчу. Сложные посты буду разбивать на части - так их проще писать.


Читать дальше......

Постоянные читатели

Обо мне

Моя фотография
Мой e-mail: vitek_03(at)mail(dot)ru