Журнал LinuxFormat - перейти на главную

LXF158:Vim: Функ­ции для крутых

Материал из Linuxformat
Перейти к: навигация, поиск


Ре­дак­ти­ро­ва­ние тек­ста. Ос­вой­те продвинутые функ­ции Vim и станьте бо­ро­да­тым гу­ру

Содержание

Vim: Функ­ции для крутых

Учи­тесь пи­сать код бы­ст­рее и луч­ше – Джо­на­тан Ро­бертс покаж­ет вам не­ко­то­рые рас­ши­рен­ные функ­ции Vim для высшего пилотажа.

(thumbnail)
Наш эксперт Супер-скрытный Джонатан Робертс копается в Linux с детских лет. Иными словами, не так уж долго.

В LXF156 мы по­зна­ко­ми­ли вас с Vim, про­де­мон­ст­ри­ро­вав доста­точ­но его функ­ций, что­бы с ним управ­лять­ся. Знание основ Vim по­лез­но са­ма по се­бе, по­сколь­ку вы за­од­но бу­де­те знать, как ис­поль­зо­вать Vi, тек­сто­вый ре­дак­тор, уста­нов­лен­ный по умол­чанию прак­ти­че­­ски во всех Unix-по­доб­ных сис­те­мах.

Но Vim спо­со­бен на го­раз­до боль­шее, и го­лые осно­вы са­ми по се­бе не объ­яс­ня­ют, по­че­му мно­гие лю­ди, про­грам­ми­сты и пи­са­те­ли, обо­жа­ют дан­ный тек­сто­вый ре­дак­тор. На уро­ке это­го ме­ся­ца мы ре­ши­ли про­све­тить вас, рас­смот­рев ряд про­дви­ну­тых функ­ций Vim. Да­вай­те начнем с идеи, что ко­ман­ды Vim со­став­ля­ют язык ре­дак­ти­ро­вания тек­ста.

В LXF156 мы по­ка­за­ли, как пе­ре­ме­щать­ся по тек­сту до­ку­мен­та. Ес­ли вы помните, кла­ви­ши h, j, k и l пе­ре­ме­ща­ют вле­во, вниз, вверх и впра­во, 0 пе­ре­мес­тит вас в на­ча­ле стро­ки, а $ – в конец стро­ки.

В Vim эти дей­ст­вия на­зы­ва­ют «под­виж­ки [motion]». Команд-под­ви­жек еще мно­го. w, на­при­мер, пе­ре­ме­ща­ет к на­ча­лу сле­дую­ще­го сло­ва, b – к на­ча­лу пре­ды­ду­ще­го сло­ва, а (and) дви­га­ет впе­ред и на­зад од­но пред­ло­жение. Что­бы уви­деть все ко­ман­ды-под­виж­ки, ско­ман­дуй­те в Vim :help motion.

Есть, од­на­ко, дру­гая ка­те­го­рия умных команд, ко­то­рых мы в про­шлый раз не рас­смат­ри­ва­ли. Они из­вест­ны как опе­ра­то­ры [operator], и, как нетрудно до­га­дать­ся, они из­ме­ня­ют час­ти тек­ста до­ку­мен­та. На­при­мер, c из­ме­ня­ет, d уда­ля­ет, а y «выдер­ги­ва­ет [yank]», или ко­пи­ру­ет, вы­де­лен­ный текст. Ум­ны­ эти ко­ман­ды благодаря тому, что они ис­поль­зу­ют­ся не са­ми по се­бе, но в со­че­тании с под­виж­кой.

Для уда­ления це­ло­го сло­ва по­мес­ти­те кур­сор на на­ча­ло это­го сло­ва, а за­тем вве­ди­те dw. Ес­ли вы ре­ши­те, что вам не нра­вит­ся по­следнее на­пи­сан­ное пред­ло­жение, вы мо­же­те из­менить его, вве­дя c(.

Бо­лее то­го, вы не ог­раниче­ны уда­лением од­ной стро­ки, сло­ва или лю­бой дру­гой ис­поль­зуе­мой под­виж­кой. Все ко­ман­ды мо­гут пред­ва­рять­ся «счет­чи­ком», ко­то­рый оп­ре­де­ля­ет, сколь­ко раз вы­пол­нять это дей­ст­вие. d2w уда­ля­ет два сло­ва, а c3) из­менит сле­дую­щие три пред­ло­жения.

Вы да­же мо­же­те ком­бини­ро­вать счет­чик и под­виж­ку без уча­стия опе­ра­то­ра: так, 4w пе­ре­мес­тит кур­сор на че­ты­ре сло­ва впе­ред. По­сколь­ку ко­ман­ды мож­но объ­е­ди­нять, Стив Лош [Steve Losh] опи­сы­ва­ет ин­тер­фейс команд Vim как по­до­бие язы­ка. Опе­ра­то­ры – как гла­го­лы: они «де­ла­ют» сло­ва и опи­сы­ва­ют то, что мы хо­тим, что­бы слу­чи­лось; под­виж­ки – как су­ще­ст­ви­тель­ные: они задают объ­ект, на ко­то­рый мы хо­тим по­вли­ять гла­го­лом.

Наи­бо­лее важ­ная идея, ко­то­рую мож­но от­сю­да по­черп­нуть – то, что лю­бую под­виж­ку мож­но со­че­тать с лю­бым опе­ра­то­ром. Это оз­на­ча­ет, что, потихоньку изу­чая раз­лич­ные под­виж­ки и опе­ра­то­ры, на де­ле вы изу­чае­те мощ­ный язык ре­дак­ти­ро­вания тек­ста.

Нуж­но толь­ко помнить об­щую фор­му ко­ман­ды Vim:

<счет­чик><опе­ра­тор><tтекстовый объ­ект или под­виж­ка>

Это класс­ная идея, ко­то­рая вво­дит в са­мую суть при­чи­ны, по­че­му Vim так лю­бим те­ми, кто по­тра­тил вре­мя на его изу­чение.

Vim для про­грам­ми­стов

Для це­ло­го по­ко­ления про­грам­ми­стов, Vim и ана­ло­гич­ные про­стые (но мощ­ные) тек­сто­вые ре­дак­то­ры бы­ли вы­теснены ин­тег­ри­ро­ван­ны­ми сре­да­ми раз­ра­бот­ки (IDE). Эти сре­ды по­став­ля­ют­ся с мас­сой функ­ций, пред­на­зна­чен­ных для по­вы­шения про­дук­тив­но­сти ко­ди­ро­вания, вклю­чая под­свет­ку син­так­си­са, фай­ло­вые брау­зе­ры, менед­же­ры про­ек­тов и ин­тег­ри­ро­ван­ные ком­пи­ля­то­ры – все, что нуж­но для на­пи­сания ко­да.

Они так­же раз­ду­ты и за­час­тую не име­ют про­дви­ну­тых функ­ций ре­дак­ти­ро­вания тек­ста, придающих Vim такую мощь. Од­на­ко вы смо­же­те на­сла­дить­ся преимуще­­ст­ва­ми обо­их, на­стро­ив Vim.

Встро­ен­ные при­ят­но­сти

Во-пер­вых, встро­ен­ные при­ят­но­сти. В на­шей уста­нов­ке Fedora Vim идет с под­держ­кой под­свет­ки син­так­си­са и с 534 оп­ре­де­ления­ми раз­лич­ных язы­ков. Ес­ли вы ис­поль­зуе­те эк­зо­ти­че­­ский язык, не ох­ва­чен­ный этим на­бо­ром, или недо­воль­ны пре­достав­лен­ным фай­лом, мо­же­те заглянуть на www.vim. org/scripts – там мно­го но­вых и аль­тер­на­тив­ных фай­лов син­так­си­са.

Так­же име­ет­ся ав­то­до­полнение. По умол­чанию, ввод несколь­ких букв сло­ва и по­сле­дую­щее на­жа­тие Ctrl+n вы­зо­вет спи­сок воз­мож­ных сов­па­дений из осталь­ной час­ти до­ку­мен­та. Про­кру­ти­те эти сов­па­дения с Ctrl+n, а за­тем про­дол­жи­те ввод для за­вер­шения сло­ва. Это от­лич­ный спо­соб бы­ст­ро за­вер­шать функ­ции и име­на пе­ре­мен­ных, без опе­ча­ток.

Мо­ду­ли рас­ши­рения

За­тем, есть мо­ду­ли рас­ши­рения, ко­то­рые вам за­хо­чет­ся уста­но­вить. surround.vim до­бав­ля­ет но­вый тек­сто­вый объ­ект, s, и вы мо­же­те при­ме­нять его для из­менения ок­ру­жаю­щих ка­вы­чек, тэ­гов, квад­рат­ных или круг­лых ско­бок. Что­бы его ис­поль­зо­вать, на­бе­ри­те

cs”’ — ок­ру­жаю­щие двой­ные ка­выч­ки из­ме­нят­ся на оди­ноч­ные; ysiw<em> до­ба­вят тэ­ги уси­ления те­ку­ще­го сло­ва, а ds<em> уда­лит их
. Еще один от­лич­ный мо­дуль – taglist.vim. Он ана­ли­зи­ру­ет фай­лы ко­да, оп­ре­де­ля­ет функ­ции, клас­сы, пе­ре­чис­ления и т. д., а за­тем со­став­ля­ет ин­декс, что по­зво­ля­ет бы­ст­ро пе­рей­ти к их оп­ре­де­лению в фай­ле. Ес­ли у вас есть несколь­ко бу­фе­ров от­кры­ты, все они бу­дут доступ­ны из от­дель­но­го спи­ска.

Два дру­гих мо­ду­ля на­стоя­тель­но ре­ко­мен­ду­ют­ся для ко­ди­ро­вания. NERDTree пре­достав­ля­ет встро­ен­ный брау­зер фай­лов, об­лег­чаю­щий управ­ление фай­ла­ми ва­ше­го про­ек­та и от­кры­тие но­вых бу­фе­ров. snipMate пре­достав­ля­ет го­то­вые фраг­мен­ты для мно­гих язы­ков, в том чис­ле цик­лы, функ­ции и оп­ре­де­ления клас­сов, что­бы сэ­ко­но­мить вам пе­ча­тание.

Дру­гие объ­ек­ты

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

Но Vim – это Vim, и его ав­то­ры соз­да­ли спо­соб смяг­чить и эту про­бле­му. Vim име­ет ряд «тек­сто­вых объ­ек­тов», ко­то­рые ра­бо­та­ют как под­виж­ки, но дей­ст­ву­ют на весь объ­ект, а не в на­прав­лении дви­жения.

Все эти тек­сто­вые объ­ек­ты на­чи­на­ют­ся ли­бо с a, ли­бо с i. Они ука­зы­ва­ют, же­лае­те ли вы ра­бо­тать «во­круг» объ­ек­та, то есть при­хва­ты­вать ок­ру­жаю­щие про­бе­лы, или «внут­ри» объ­ек­та, то есть про­бе­лы иг­но­ри­ро­вать.

Ос­та­лось уз­нать, с ка­ки­ми объ­ек­та­ми мож­но ра­бо­тать по­доб­ным об­ра­зом. Есть w для ра­бо­ты над сло­вом, s – над пред­ло­жения­ми, p – над аб­за­ца­ми, а так­же все ви­ды ско­бок и ка­вы­чек.

Рас­смот­рим та­кой ку­сок ко­да JavaScript:

function vimRules(alpha, beta) { }

При же­лании из­менить па­ра­мет­ры, пе­ре­да­вае­мые в функ­цию, вы мо­же­те по­мес­тить кур­сор в лю­бом мес­те в скоб­ках и на­брать ci), для «из­менения в скоб­ках». Те­ку­щие ар­гу­мен­ты бу­дут уда­ле­ны, скоб­ки оста­нут­ся на мес­те, а Vim пе­рей­дет в ре­жим встав­ки, го­то­вый, что­бы вы на­ча­ли пе­ча­тать.

Или, ес­ли вы ра­бо­та­ли над со­чинением или стать­ей и по­ду­ма­ли, что пре­ды­ду­щее пред­ло­жение бы­ло несколь­ко мно­го­слов­но, вам нуж­но все­го лишь по­мес­тить кур­сор в лю­бом мес­те пре­ды­ду­ще­го пред­ло­жения и на­брать cas, и пред­ло­жения не станет.

Пе­ре­ме­щение

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

Ввод / пе­ре­ве­дет Vim в ре­жим по­ис­ка: Vim бу­дет ожи­дать вво­да стро­ки, ко­то­рую вы ище­те.

На­жа­тие Return пе­ре­мес­тит кур­сор на пер­вое сов­па­дение, а по­втор­ное на­жа­тие n пе­ре­мес­тит кур­сор на по­сле­дую­щие .

Ре­жим по­ис­ка Vim – весьма эф­фек­тив­ный спо­соб бы­ст­рого пе­ре­ме­щения по до­ку­мен­ту, но, как и боль­шин­ст­во оп­ций Vim по умол­чанию, мо­жет быть из­менен и улуч­шен по­сред­ст­вом манипу­ля­ции неко­то­ры­ми из мно­гих доступ­ных на­стро­ек.

Vim для пи­са­те­лей

На­строй­ки Vim по умол­чанию не слиш­ком под­хо­дят для про­заи­ков. Это не зна­чит, что стан­дарт­ные кла­ви­ши ре­дак­ти­ро­вания тек­ста бес­по­лез­ны – во­все нет; но есть несколь­ко непри­ят­но­стей, ко­то­рые луч­ше бы ис­пра­вить, пре­ж­де чем серь­ез­но за­нять­ся пи­са­тель­ст­вом в Vim.

В осно­ве мно­гих из этих про­блем ле­жит манера Vim трактовать аб­за­цы как длин­ные стро­ки. В ча­ст­но­сти, это ме­ша­ет ис­поль­зо­вать кла­ви­ши кур­со­ра по умол­чанию для пе­ре­ме­щения по линиям «эк­ра­­на», и в ре­зуль­та­те текст за­ла­мы­ва­ет­ся по­сре­ди сло­ва. Обе эти про­бле­мы ре­ша­ют­ся до­бав­лением несколь­ких за­пи­сей в файл .vimrc. Что­бы спра­вить­ся с пер­вой, пе­ре­на­значь­те ко­ман­ды gj и gk как j и k:

nnoremap j gj

nnoremap k gk

Те­перь при на­бо­ре j или k в Обыч­ном ре­жи­ме кур­сор бу­дет дви­гать­ся вверх или вниз на од­ну стро­ку эк­ра­на. Вы так­же мо­же­те пе­ре­на­зна­чить $ и 0 для пе­ре­ме­щения кур­со­ра в конец и на­ча­ло стро­ки эк­ра­на. Для ре­шения про­бле­мы за­ла­мы­вания нуж­ны та­кие па­ра­мет­ры в фай­ле .vimrc:

set wrap

set linebreak

wrap ве­лит Vim за­ла­мы­вать длин­ные стро­ки тек­ста на краю ви­ди­мо­го эк­ра­на, без до­бав­ления сим­во­ла пе­ре­во­да стро­ки.

linebreak ве­лит Vim за­ла­мы­вать текст толь­ко на сим­во­лах, пе­ре­чис­лен­ных в оп­ции breakat. По умол­чанию сюда вклю­ча­ются про­бе­лы, знаки та­бу­ля­ции и зна­ки пре­пи­нания.

После этого писателям уже не при­дет­ся стра­дать от ра­зо­рван­ных слов в кон­це стро­ки.

› Сайт Vim при­ютил сот­ни скрип­тов, по­зво­ляю­щих на­страи­вать Vim са­мым чу­дес­ным об­ра­зом.

В Vim, по­про­буй­те вы­полнить :set incsearch и по­ис­кать некий текст. Вы за­ме­ти­те, что вхо­ж­дения бу­дут вы­де­лять­ся по ме­ре вво­да. Вы мо­же­те ис­поль­зо­вать это, что­бы до­б­рать­ся до мес­та в тек­сте еще бы­ст­рее, на­брав лишь ку­сок сло­ва, доста­точ­ный для его од­но­знач­ной иден­ти­фи­ка­ции. Уви­дев, что нуж­ное сло­во вы­де­ле­но, на­жми­те Return и вы­пол­няй­те же­лае­мые ко­ман­ды ре­дак­ти­ро­вания.

По­иск мож­но уточнить, вы­полнив команды :set ignorecase и :set smartcase. Пер­вая де­ла­ет по­иск без уче­та ре­ги­ст­ра, а вто­рая от­ме­ня­ет результаты пер­вой, ес­ли в строке поиска при­сут­ст­ву­ют за­глав­ные бу­к­вы. Та­ким об­ра­зом, по­иск “bob” об­на­ру­жит “Bob”, “BOB” и “BoB”; а по­иск “Bob” – толь­ко “Bob”.

Vimrc

Vim име­ет мно­го, ну очень мно­го на­стро­ек. Вы мо­же­те про­смот­реть их все, вы­полнив :options. По ме­ре про­смот­ра, на­жа­тие на Return на стро­ке ‘set’ бу­дет пе­ре­клю­чать оп­ции, а на­жа­тие Return на стро­ке опи­сания даст вам пол­ное опи­сание дан­но­го па­ра­мет­ра.

Про­дви­га­ясь даль­ше и уз­на­вая боль­ше о раз­лич­ных па­ра­мет­рах, ко­то­рые вы хо­ти­те вклю­чать при ка­ж­дом за­пуске се­ан­са Vim, мож­но на­стро­ить Vim, что­бы лю­би­мые на­строй­ки сра­зу во­шли в действие.

Для это­го Vim пре­достав­ля­ет файл /home/<user>/.vimrc. Это ваш лич­ный файл на­стро­ек. В ка­ж­дой стро­ке по­ме­ща­ют­ся от­дель­ные ко­ман­ды, ко­то­рые вы мог­ли бы пе­ча­тать по­сле двое­то­чия в Обыч­ном [Normal] ре­жи­ме Vim. На­при­мер, ес­ли вы хо­ти­те вклю­чить ука­зан­ные вы­ше па­ра­мет­ры по­ис­ка по умол­чанию, ваш файл .vimrc бу­дет вы­гля­деть так:

set incsearch

set ignorecase

set smartcase

За­ме­тим, что для вво­да на­стро­ек в дей­ст­вие сле­ду­ет пе­ре­запустить Vim.

За­бав­ный спо­соб по­лу­чить пред­став­ление о том, ка­кие па­ра­мет­ры по­лез­но вклю­чить в файл .vimrc — по­гла­зеть на дру­гих лю­дей. Мно­гие вывешивают свои настройки в Ин­тернет, так что бы­ст­рый по­иск по vimrc до­бу­дет мно­го ре­зуль­та­тов. Вы так­же мо­же­те оз­на­ко­мить­ся с дву­мя врез­ка­ми, Vim для про­грам­ми­стов и Vim для пи­са­те­лей, что­бы уви­деть, ка­кие па­ра­мет­ры сто­ит вклю­чить, ес­ли вы по­па­дае­те в лю­бой из этих ка­те­го­рий.

Дер­готня

Мы уже рас­смот­ре­ли са­мые рас­про­странен­ные функ­ции ре­дак­ти­ро­вания и пе­ре­до­вые прие­мы Vim, ко­то­рые де­ла­ют его эф­фек­тивнее и мощнее. Един­ст­вен­ное, о чем мы по­ка не го­во­ри­ли, од­на­ко, это ко­пи­ро­вание и встав­ка.

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

Во-пер­вых, осно­вы. Ко­пи­ро­вание в Vim на­зы­ва­ет­ся «вы­дер­ги­ванием [yanking]» и вы­пол­ня­ет­ся клавишей y в Обыч­ном или Ви­зу­аль­ном [Visual] ре­жи­ме. Встав­ка осу­ще­ст­в­ля­ет­ся по клавише p. Вы­ре­зание в Vim – это все рав­но что уда­ление, и вы­ре­зать текст мож­но лю­бой из команд уда­ления.

Вме­сто то­го, что­бы со­хра­нять вы­дер­ги­вание, встав­ку и вы­ре­зание в од­ном мес­те, Vim име­ет несколь­ко ре­ги­ст­ров. Име­на у них от a до z, и вы в лю­бой мо­мент вре­мени мо­же­те по­лу­чить 26 раз­лич­ных ку­соч­ков тек­ста.

Ре­ги­ст­ры ра­бо­та­ют, пред­ва­ряя од­ну из ука­зан­ных опе­ра­ций стро­кой ”a, где” ‘a’ – имя ре­ги­ст­ра. Итак, что­бы ско­пи­ро­вать сло­во в ре­гистр ‘b’, вы долж­ны вве­сти ”byw в Обыч­ном ре­жи­ме. Для встав­ки это­го тек­ста вве­ди­те ”bp.

Имя ре­гистра ука­зы­вать не обязатель­но. Ес­ли это­го не сде­лать, Vim про­сто со­хранит или возь­мет со­дер­жи­мое из бе­зы­мян­но­го ре­ги­ст­ра ””.

Кро­ме этих ре­ги­ст­ров об­ще­го на­зна­чения, в Vim так­же име­ет­ся несколь­ко спе­ци­аль­ных. Са­мый по­лез­ный из них – ре­гистр ‘0’. Он хранит толь­ко «вы­дер­ну­тый» текст, а бе­зы­мян­ный ре­гистр – так­же и уда­лен­ный текст.

Это по­лез­но, когда вы хо­ти­те вы­дер­нуть текст, уда­лить несколь­ко строк, а за­тем вста­вить его. Ес­ли вы про­сто ис­поль­зо­ва­ли бе­зы­мян­ный ре­гистр, вы­дер­ну­тый текст за­менит­ся на уда­лен­ный. Ес­ли вы встав­ляе­те с ”0p, вы по­лу­чи­те вы­дер­ну­тый текст, а не уда­лен­ный.

Мо­ду­ли рас­ши­рения

Есть од­на функ­ция Emacs, свя­зан­ная с вы­дер­ги­ванием, ко­то­рой в Vim никогда не бы­ло, под на­званием «по­койниц­кая [kill ring]». Она со­хра­ня­ет все вы­дер­ну­тые, уда­лен­ные или из­менен­ные тек­сты и де­ла­ет их доступ­ны­ми для ка­ж­до­го за­пу­щен­но­го эк­зем­п­ля­ра Emacs. При ка­ж­дом до­бав­лении че­го-то в «по­койниц­кую» пре­ды­ду­щее со­дер­жи­мое оста­ет­ся, и поль­зо­ва­тель мо­жет пе­ре­клю­чать­ся ме­ж­ду все­ми пре­ды­ду­щи­ми «уби­ты­ми».

Vim, од­на­ко, име­ет мощ­ный скрип­то­вый ин­тер­фейс, что оз­на­ча­ет воз­мож­ность раз­но­об­раз­но­го его рас­ши­рения и до­полнения. Один поль­зо­ва­тель соз­дал скрипт yankring, ко­то­рый воссоз­да­ет «по­койниц­кую» Emacs.

Все скрип­ты Vim мож­но най­ти в Ин­тернете, на www.vim.org/scripts. Зай­дя на этот сайт и по­ис­кав скрипт yankring, вы уви­ди­те ссыл­ку для его ска­чи­вания.

Что­бы настроить Vim на до­бав­ление но­вых скриптов, вам пер­вым де­лом нуж­но соз­дать два но­вых ка­та­ло­га:

mkdir ~/.vim/plugins

mkdir ~/.vim/docs

По­сле это­го рас­па­куй­те ар­хив и ско­пи­руй­те со­дер­жи­мое его ка­та­ло­га мо­ду­лей во вновь соз­дан­ный ка­та­лог .vim/plugins, ана­ло­гич­но по­сту­пив с со­дер­жи­мым ка­та­ло­га docs. Сде­лав это, пе­ре­за­пусти­те Vim, об­но­ви­те ин­декс под­сказ­ки по :helptags $HOME/.vim/doc, и вы в дам­ках. Вот так уста­нав­ли­ва­ют­ся все скрип­ты Vim.

Что­бы уз­нать, как ис­поль­зо­вать Yankring, за­пусти­те :help yankring-tutorial. Скрип­тов для Vim пол­ным-пол­но.

--Под­строй­ка Vim «под се­бя»--

Мо­ду­ли рас­ши­рения – не един­ст­вен­ный спо­соб на­стро­ить Vim. Vim так­же под­дер­жи­ва­ет соз­дание но­вых со­кра­щений и рас­клад­ки кла­виа­ту­ры, что по­зво­ля­ет при­ду­мать бы­ст­рые спо­со­бы сде­лать поч­ти все.

Начнем с со­кра­щений. Здесь, в LXF, мы долж­ны пред­ста­вить наш текст с под­за­го­лов­ка­ми, ко­дом и врез­ка­ми по все­му тек­сту. На­ша раз­мет­ка вы­гля­дит так:

/// Код ///

SomeFunction () {}

/// Код ///

Вво­дить по­вто­ряю­щие­ся сим­во­лы наподобие этих, осо­бен­но с на­дол­го при­жа­той кла­ви­шей Shift, на ред­кость нуд­но! Что­бы по­мочь го­рю, мож­но про­сто соз­дать но­вую аб­бре­виа­ту­ру в Vim. Как под­ска­зы­ва­ет на­звание, аб­бре­виа­ту­ра – это осо­бая стро­ку тек­ста, ко­то­рая при пе­ре­хо­де в ре­жим встав­ки за­ме­ня­ет­ся на бо­лее длин­ный фраг­мент тек­ста. До­бав­ление iab codes и iab endc к ва­ше­му фай­лу .vimrc, на­при­мер, оз­на­ча­ет, что ес­ли вы вве­де­те “codes”, за­тем про­бел, оно бу­дет за­менено на /// Код ///.

Так го­раз­до про­ще, но будь­те осто­рож­ны с теми строками, что вы ис­поль­зуе­те для аб­бре­виа­тур.

Аб­бре­виа­ту­ры мож­но применять для за­ме­ны ти­пич­ных опе­ча­ток. Ес­ли вы час­то пе­ча­тае­те ‘the’ как ‘teh’, за­дай­те это как аб­бре­виа­ту­ру, и опе­чат­ка всегда бу­дет уст­ранена.

--На­зна­чение кла­виш--

На­зна­чение кла­виш [key maps] от­ли­ча­ет­ся от аб­бре­виа­тур. Это не пре­достав­ление бы­ст­ро­го спо­со­ба вве­сти фик­си­ро­ван­ные тек­сто­вые стро­ки: пе­ре­на­зна­чение кла­виш по­зво­ля­ет соз­да­вать аль­тер­на­тив­ные пу­ти для вы­полнения раз­лич­ных действий в Vim.

Возь­ми­те, к при­ме­ру, Yankring. Что­бы уви­деть, что сей­час на­хо­дит­ся в Yankring, нуж­но вы­полнить :YRShow. Это не слиш­ком эф­фек­тив­ная ко­ман­да, но вы мо­же­те уско­рить про­цесс, по­ве­сив ее на од­ну кла­ви­шу.

В Vim есть два спо­со­ба это сде­лать. Пер­вый до­бав­ля­ет запись ‘map’ в файл .vimrc. Фор­мат по­хож на фор­мат за­пи­си ‘iab’: map <F5>:YRShow<CR> ве­лит кла­ви­ше F5 за­пустить по­каз Yankring. Об­ра­ти­те внимание, что ука­зан­ные на­жа­тия кла­виш имен­но те, что вы на­бра­ли бы, вы­пол­няя ко­ман­ду, в том чис­ле <CR> (воз­врат ка­рет­ки).

Та­кое при­менение map мо­жет, од­на­ко, вы­звать про­бле­мы, поскольку по умол­чанию это ре­кур­сив­ная ко­ман­да. Это оз­на­ча­ет, что ес­ли вы на­зна­чи­те j для gj, а по­том d для j, то об­на­ру­жи­те, что d бу­дет вы­пол­нять не j, а gj. Что­бы обой­ти эту про­бле­му, мож­но ис­поль­зо­вать ко­ман­ду noremap, ко­то­рая соз­да­ет ото­бра­жения, не яв­ляю­щие­ся ре­кур­сив­ны­ми. Вернувшись к нашему при­меру с ко­ман­дой noremap, вы об­на­ру­жи­те, что j вы­пол­ня­ет gj, а d вы­пол­ня­ет j.

Это еще не все, лю­ди

Хо­тя мы по­до­шли к кон­цу уро­ка это­го ме­ся­ца, в Vim еще мно­го че­го оста­лось неох­ва­чен­ным. Обя­за­тель­но про­чти­те от­лич­ные встро­ен­ные фай­лы по­мо­щи, осо­бен­но те, что со­став­ля­ют ру­ко­вод­ство поль­зо­ва­те­ля, на­брав :help user. По сравнению со спра­воч­ной до­ку­мен­та­ци­ей это при­ят­ное чтение.

Са­мое глав­ное, не пе­ре­жи­вай­те, ес­ли не вы­учи­те все сра­зу. Для это­го там про­сто слиш­ком все­го мно­го. Вме­сто это­го, изу­чай­те по кускам, по ме­ре на­доб­но­сти, и бла­го­да­ря ло­ги­ке, ле­жа­щей в осно­ве сис­те­мы ко­манд Vim, вы ско­ро об­на­ру­жи­те, что ос­вои­ли слож­ный язык ре­дак­ти­ро­ва­ния тек­ста! |

При­да­дим Vim эле­гант­но­сти

Ас­ке­ты сре­ди нас мо­гут ду­мать, что внеш­нее оформление ва­ше­го тек­сто­во­го ре­дак­то­ра не име­ет зна­чения: ну, ви­ди­те вы сло­ва на эк­ране и мо­же­те де­лать ра­бо­ту, а все осталь­ное толь­ко от­вле­ка­ет. От­час­ти это вер­но, но ес­ли вы це­лый день пя­ли­тесь в свой тек­сто­вый ре­дак­тор, вам бу­дет ва­жен его при­ят­ный вид. Вам за­хо­чет­ся, что­бы схе­ма под­свет­ки син­так­си­са бы­ла осмыс­лен­ной, а так­же кон­тра­ста для удоб­ст­ва.

Ес­ли вы ис­поль­зуе­те gVim, гра­фи­че­­ский порт Vim, или ваш тер­ми­нал под­дер­жи­ва­ет цве­та (боль­ши­ст­во со­вре­мен­ных тер­ми­на­лов это уме­ют), то мож­но на­стро­ить цве­та Vim для ото­бра­жения тек­ста.

Цве­то­вые схе­мы при­хо­дят как фай­лы .vim, и их на­до со­хранить в ка­та­ло­ге ~/.vim/ colors, что­бы пустить в де­ло. Сде­лав это, уста­но­ви­те :colorscheme <schemename> в сво­ем фай­ле .vimrc для ис­поль­зо­вания схе­мы.

Мно­го раз­ных схем есть на http://tinyurl.com/7omvmuq, и вы мо­же­те ис­поль­зо­вать ссыл­ки в нижней час­ти http://code.google.com/p/vimcolorschemetest для пред­про­смот­ра всех цве­то­вых схем.

Персональные инструменты
купить
подписаться
Яндекс.Метрика