OSX: изменение выделения текста с помощью ⌘⇧→ и ⌘⇧ ←

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

ААА |{ВВВ ССС

DDD} EEE FFF

создать выделение


Теперь я хотел бы изменить выделение так, чтобы оно начиналось в конце первой строки , т.е. чтобы оно выглядело так:

Ожидаемый результат:

ААА ВВВ ССС |{

DDD} EEE FFF


Я могу уменьшить выбор слово за словом с помощью :

манипулировать выделением с помощью стрелок option-shift


Но естественным способом сделать это было бы через , чтобы перейти прямо в конец первой строки. Во многих приличных текстовых редакторах это работает нормально (например, Sublime Text 2). Они также сохраняют |позицию видимой, когда текст выделен, кстати.

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

Фактический результат:

ААА {ВВВ ССС

DDD EEE FFF}|

манипулировать выделением с помощью команд-Shift-стрелок


Есть ли способ заставить собственные приложения OSX вести себя ожидаемым образом?

У меня OSX Yosemite 10.10.2, но я думаю, что эта проблема существует, сколько я себя помню.

Я могу воспроизвести это в 10.10.1 — может быть, это было исправлено в бета-версии?
Я использую Yosemite 10.10.2 (сейчас также добавляю это к вопросу). Но я думаю, что так было всегда. В основном я использую редакторы кода с хорошими возможностями редактирования текста, но мне бы хотелось найти для этого решение на уровне ОС.
Я также обновил вопрос несколькими анимированными картинками, чтобы было легче понять, в чем проблема.
Пожалуйста, ознакомьтесь с этим документом поддержки Apple , в котором говорится, что cmd+shift+стрелка вправо будет select text between the insertion point and the end of the current line. Единственная строка в вашем примере, где выделение еще не включает конец строки , — это последняя строка. Таким образом, ожидаемое поведение в OS X состоит в том, чтобы расширить выбор оттуда, а не сократить его в начальной строке! Я знаю, что некоторые редакторы ведут себя по-другому, но они делают это неправильно , а не система!
@Asmus Спасибо за ссылку. Поведение OSX по умолчанию действительно соответствует тому, что задокументировано на этой странице, поэтому технически оно правильное. Однако мой вопрос остается в силе — возможно ли изменить его глобально, чтобы он вел себя так, как в более продвинутых редакторах (и в Linux и Windows, если уж на то пошло)?
@Asmus После описания этого (и многих других) сочетания клавиш есть маленькая звездочка, но объяснения этому нет. Есть идеи, что это (*)значит?
Не знаю, что это (*)значит, но, вероятно, это осталось от предыдущих версий документации. Я немного обновил свой ответ, включив в него известную мне только глобальную привязку клавиш, но, к сожалению, я почти уверен, что нет способа добиться того, что вы ищете. Поскольку поведение не является встроенным, приложения теперь не знают, как с ним справиться, даже если вы можете его активировать.
Спасибо, @Асмус. Я проголосовал за ваш ответ. Подождем немного, прежде чем принять его, на случай, если кто-то придумает какое-нибудь гениальное решение.
Меня это тоже каждый раз сбивает с толку. Игнорирование неявной позиции курсора очень нелогично. Мой обходной путь — использовать ⌥ + ⇧ вместе с клавишами со стрелками, которые ведут себя так, как ожидалось, и, по крайней мере, немного быстрее, чем переход по символам.

Ответы (2)

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

Вы можете увидеть это продемонстрированным, если вы используете Cmd ⌘ Shift ⇧ вместо
добавления к выборке с Shift ⇧ включает предыдущую выборку.

Не исправление, а обходной путь может заключаться в том, чтобы переместить курсор в конец вашего текущего выделения, одновременно отменив его выбор, а затем Cmd ⌘ Shift ⇧ выбрать начало строки.

Что это значит? «Множественное выделение текста».

Итак, как я это вижу, текстовая навигация в OS X работает (и ожидается, что она будет работать) следующим образом:

  1. Навигация по строке (или документу, т.е. огромным кускам данных):

    cmd+клавиши со стрелками : перемещение по строкам (влево/вправо для строк, вверх/вниз для всего документа). Удерживайте shift, чтобы выбрать

  2. Навигация по словам (т. е. небольшим фрагментам данных):

    alt+клавиши со стрелками : перемещение по слову (влево/вправо). Удерживайте shift, чтобы выбрать.

Таким образом, чтобы достичь «ожидаемого результата», вы должны сначала нажать стрелку вправо, чтобы перейти к концу текущего выделения, а затем cmd+ shift+ , чтобы выбрать строку, ведущую к нему.

Когда у вас уже есть выбор:

  1. использование приведенной altвыше комбинации клавиш увеличит/уменьшит выбор в зависимости от направления (всегда изменяя конечную точку вашего предыдущего выбора, предполагая , что вы немного пропустили конечную точку ). То же самое касается добавления отдельных символов только с помощью клавиш Shift+стрелки.
  2. комбо увеличивается cmdв обоих направлениях, предполагая, что вы все равно выбираете большие куски текста .

Обновлять

Короче говоря: то, что вы хотите, на самом деле невозможно. Если вы посмотрите на список доступных привязок системных клавиш, запустив

plutil -convert xml1 /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict -o -|pl|grep -v noop:|ruby -pe '$_.gsub!(/[^ -~\n]/)' | grep -i selection

Вы увидите, что, несмотря на то, что вы можете привязать пользовательские клавиши ко всем функциям выбора ~/Library/KeyBindings/DefaultKeyBinding.dict, нет такой функции, которая обеспечивает требуемое поведение (поскольку это поведение не встроено в систему).

Я думаю, что Apple Up и Apple Down идут в начало и конец документа, а не перемещаются по страницам.
@NicolasBarbulesco, вы совершенно правы, я написал «документ» всего за строку до этого, не знаю, почему дальше я написал «страницы». Исправлено сейчас.