Vim object-select с синтаксически-текстовыми объектами - PullRequest
5 голосов
/ 07 июля 2010

Я только что узнал о по-настоящему потрясающих object-select возможностях vim.С курсором в некотором «текстовом объекте», набор простых глаголов может выбирать или воздействовать на весь объект.Например, с курсором в любом месте внутри кавычек ниже (например, над 'o'):

print "Hello, world"
           ^

Команда vi" выберет всю фразу внутри кавычек.Эта же возможность работает с рядом « текстовых объектов », которые определяет vim, включая слова, предложения, абзацы и символы, заключенные в кавычки, скобки и фигурные скобки.

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

re.sub("[^A-Z ]", " ", string)

Я хотел бы иметь возможность разместить курсор где-нибудь над этим и выбрать все это.Вызов функции является четко определенной синтаксической конструкцией, но это не «слово», «предложение», «абзац» или заключенные в кавычки или фигурные скобки.

Существуют ли какие-либо плагины или хиты vimrc, которые определяют эти виды зависящих от языка "текстовых объектов"?

Ответы [ 5 ]

4 голосов
/ 11 июня 2011

Этот скрипт использует отступ для определения текстового объекта. Это будет работать для многих языков, если вы форматируете в соответствии с общими стандартами и гарантировано для Python.

3 голосов
/ 07 июля 2010

Хотя возможно построить карты, которые будут выбирать всю область синтаксиса , но они не будут работать с вашим сценарием, поскольку нет области синтаксиса "вызова функции".

Один из вариантов - выбрать выражение в скобках, а затем расширить его назад, чтобы включить вызов функции.

va)oB
  • va) выбирает выражение в скобках
  • o переключает, в каком конце визуального выделения находится курсор и в каком направлении вы расширяетесь.
  • B перемещает курсор назад на одно слово. То есть к символу сразу после пробела, предшествующего курсору.
1 голос
/ 07 июля 2010

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

0 голосов
/ 13 февраля 2014

Мой Плагин SameSyntaxMotion обеспечивает сопоставления для перехода к границам и последующего вхождения [количества] текста, выделенного так же, как под курсором. Текстовые объекты ay и iy будут выбирать окружающий текст, принадлежащий к той же группе синтаксиса или выделенный таким же образом.

0 голосов
/ 29 октября 2012

Мое мнение по этому вопросу: https://github.com/ngn/vim-select-by-syntax

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

...