суббота, 26 июля 2008 г.

Очередной HowTo по Vim

Ранее я уже выкладывал небольшой HowTo по Vim. Тогда я только начинал свое знакомство с ним и решил, что на начальном этапе изучения лучше руководствоваться различными tutorial'ами и HowTo, а официальную документацию пока оставить в стороне. Почему? А потому, что если вы только начинаете изучать Vim, то вы еще не знаете, что вам от него нужно - необходим определенный опыт работы, чтобы при чтении документации вы смогли бы наиболее точно оценить, какие функции будут вам полезны, а о каких можно забыть. Все команды вы все равно не запомните - уж слишком их много, поэтому приходится отсеивать только те, которыми вы действительно будете пользоваться.

Поработав в Vim достаточное количество времени, чтобы понять, что мне от него нужно, я наконец-то принялся за чтение документации. Просто так ее читать бесполезно - все не запомнишь, поэтому в процессе чтения я выписывал те сочетания клавиш, которые считал для себя полезными. Конечно, даже после этого список получился довольно большой, но я его составлял не для того чтобы потом сесть и зубрить. :) Нет, это вообщем-то и не нужно. Вполне достаточно внимательно прочитать его один раз, запомнив описываемые им возможности, чтобы в последствии, когда вы в очередной раз поймаете себя на выполнении повторяющихся действий, от вас потребовалось бы только заглянуть в этот список команд и подумать, как можно сделать то же самое одной комбинацией клавиш.

Подобные HowTo просто подарок судьбы для начинающих пользователей Vim'a, т. к., прочитав их и скопипастив строчки из чужих конфигов в свои, они уже смогут работать в нем, не испытывая при этом особого дискомфорта. Данный HowTo предполагает, что вы уже знаете Vim в объеме Vim Tutor. Опытные пользователи, которые не смогли найти время для прочтения документации, также, возможно, найдут что-то полезное для себя в этой статье - я, например, к своему стыду, о командах gj и gk узнал именно из документации, но сколько же я без них мучился... :)

четверг, 17 июля 2008 г.

Назначение имен заголовкам табов в Vim

Vim предоставляет довольно удобный способ группировки редактируемых файлов - табы (вкладки). И все бы хорошо, но лично мне сильно мешал один недостаток - в именах вкладок не присутствуют их номера, и поэтому при переключении на нужную вкладку командой :tabn[tab_num] каждый раз приходится проводить взглядом по всем табам и высчитывать порядковый номер этой вкладки. При частом переключении это действительно начинает надоедать...

На днях, читая документацию к Vim, я к своему удивлению обнаружил, что он предоставляет возможность назначать собственные функции, которые будут генерировать имена для каждой вкладки. Там же был простой пример того, как это можно сделать. Пробежавшись глазами по руководству о написании скриптов для Vim, я модифицировал приведенный пример, получив следующий результат (для текстового и GUI режима отображения):


четверг, 10 июля 2008 г.

Недокументированные возможности IceWM

Если вы используете IceWM уже довольно давно, то наверняка не раз замечали, что в документации перечислены не все опции, с помощью которых его можно настроить. Я с этим сталкивался не раз, но до недавнего времени мне хватало всех тех опций, которые были мне известны.

Когда же я захотел, чтобы при запуске определенное приложение разворачивалось на весь экран (Fullscreen), то обнаружил, что в документации к ~/.icewm/winoptions нет опции, позволяющей сделать это.

Не поверив, что разработчики не реализовали подобную возможность, я полез в интернет. Не найдя в интернете решения моей проблемы, я решил посмотреть исходники IceWM. Как я и предполагал, разработчики реализовали нужную мне опцию ~/.icewm/winoptions, но не отразили это в документации. Там же я нашел еще несколько опций, о которых в ней не упоминалось. Так как имена опций и их описание находились в коде недалеко друг от друга, то, составив несколько action'ов в Vim'е, я получил из исходных текстов список с парами "имя опции - описание", которым и решил с вами поделиться - вдруг кто-нибудь найдет в нем опцию, которой ему очень не хватало. Описание в коде присутствовало не для всех опций, поэтому и в моем списке они не все документированы, но по их именам в большинстве случаев совсем не сложно догадаться, что они означают.