2016-09-01 8 views
-1

Если курсор находится внутри блока {} или(), выберите блок плюс ведущий доллар. Если нет, ничего не делайте.
Есть ли простой способ без написания функции для этого?vim select {} /() плюс ведущий доллар

Если вам нужно делать скрипты, мой вопрос заключается в том, как проверить, не выбраны ли какие-либо тексты.

BR, Ruochen

+1

Можно указать на то, что Доллар _is_ лидирует в мире, но я озадачен тем, что означает ведущий доллар, о котором вы говорите. –

+0

Не могли бы вы предоставить несколько примеров текста и позиций курсора?В противном случае ответить на него почти невозможно. – DJMcMayhem

ответ

1

Предполагая, что вы хотите визуально выбрать ${bar baz} в следующем примере:

lorem ipsum ${bar baz} sit amet. 

Один метод среди многих

vab 

должны выбрать весь (foo bar).

vaB 

следует выбрать целое {bar baz}.

Оттуда вы можете переместить курсор на другой конец визуального выделения и расходуют его включить, что неуловимый ведущих $ с:

oh 

В один идут:

viboh 
viBoh 

Другой метод

F$vf) 
F$vf} 

следует переместить курсор на первый $ влево и начать выбор оттуда до следующей закрывающей скобки справа. Конечно, вы можете сделать это по-другому, если это имеет смысл для вас:

f)vF$ 
f}vF$ 

Mapping это

Если, так или иначе, вы найдете эти предложения слишком сложным, вы можете создавать собственные отображения:

nnoremap <key> f)vF$ 
nnoremap <key> f}vF$ 

Создание пользовательского текста-объекта

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

xnoremap a$ /[})]<CR>o?$<CR> 
onoremap a$ :<C-u>normal va$<CR> 

, который позволяет делать va$, конечно, но и ca$, da$, ya$ и т.д. на любом $(foo bar) или ${bar baz}.

+0

Ваше решение работает, но не совсем правильно. Рассматривая строку, такую ​​как $ (if $ (findstring a, $ (b)), ...), f) vF $ будет выбирать $ (b), а не весь блок $ (if ...), если курсор в настоящее время на работе, если. Я скорректирую карту ключей на v]) F $, но все еще остается один вопрос - если курсор находится только на самом конце), ничего не выбрано. –

+0

Мое решение охватывает самый простой случай, о котором я мог думать, учитывая отсутствие образцов и правильное описание желаемого поведения. Я бы сказал, что у вас есть намного больше, чем ваш вопрос заслуживает. Если вы хотите более универсальное и идеальное решение, взгляните на ': help searchpairpos()'. – romainl