Я выделил некоторый текст с помощью клавиатуры, начиная с нижней строки и двигаясь вверх ( символ | указывает положение курсора):
ААА |{ВВВ ССС
DDD} EEE FFF
Теперь я хотел бы изменить выделение так, чтобы оно начиналось в конце первой строки , т.е. чтобы оно выглядело так:
Ожидаемый результат:
ААА ВВВ ССС |{
DDD} EEE FFF
Я могу уменьшить выбор слово за словом с помощью ⌥ ⇧ →:
Но естественным способом сделать это было бы через ⌘ ⇧ →, чтобы перейти прямо в конец первой строки. Во многих приличных текстовых редакторах это работает нормально (например, Sublime Text 2). Они также сохраняют |
позицию видимой, когда текст выделен, кстати.
Однако поведение приложений OSX по умолчанию заключается в том, что они игнорируют тот факт, что курсор в настоящее время находится в начале выделения, и перемещение его вправо должно удалить выделение. Вместо этого ⌘ ⇧→всегда расширяет выделение от его конца до конца строки, независимо от того, где в данный момент находится курсор:
Фактический результат:
ААА {ВВВ ССС
DDD EEE FFF}|
Есть ли способ заставить собственные приложения OSX вести себя ожидаемым образом?
У меня OSX Yosemite 10.10.2, но я думаю, что эта проблема существует, сколько я себя помню.
Mac не использует позицию курсора, если у вас есть множественный выбор текста, он считает, что курсор находится во «всем выделенном тексте».
Вы можете увидеть это продемонстрированным, если вы используете Cmd ⌘ Shift ⇧ ← вместо →
добавления к выборке с Shift ⇧ включает предыдущую выборку.
Не исправление, а обходной путь может заключаться → в том, чтобы переместить курсор в конец вашего текущего выделения, одновременно отменив его выбор, а затем Cmd ⌘ Shift ⇧ ← выбрать начало строки.
Итак, как я это вижу, текстовая навигация в OS X работает (и ожидается, что она будет работать) следующим образом:
Навигация по строке (или документу, т.е. огромным кускам данных):
cmd+клавиши со стрелками : перемещение по строкам (влево/вправо для строк, вверх/вниз для всего документа). Удерживайте shift, чтобы выбрать
Навигация по словам (т. е. небольшим фрагментам данных):
alt+клавиши со стрелками : перемещение по слову (влево/вправо). Удерживайте shift, чтобы выбрать.
Таким образом, чтобы достичь «ожидаемого результата», вы должны сначала нажать стрелку вправо, чтобы перейти к концу текущего выделения, а затем cmd+ shift+ ← , чтобы выбрать строку, ведущую к нему.
Когда у вас уже есть выбор:
Короче говоря: то, что вы хотите, на самом деле невозможно. Если вы посмотрите на список доступных привязок системных клавиш, запустив
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
, нет такой функции, которая обеспечивает требуемое поведение (поскольку это поведение не встроено в систему).
0942v8653
Якуб Розточил
Якуб Розточил
Асмус
select text between the insertion point and the end of the current line
. Единственная строка в вашем примере, где выделение еще не включает конец строки , — это последняя строка. Таким образом, ожидаемое поведение в OS X состоит в том, чтобы расширить выбор оттуда, а не сократить его в начальной строке! Я знаю, что некоторые редакторы ведут себя по-другому, но они делают это неправильно , а не система!Якуб Розточил
Якуб Розточил
(*)
значит?Асмус
(*)
значит, но, вероятно, это осталось от предыдущих версий документации. Я немного обновил свой ответ, включив в него известную мне только глобальную привязку клавиш, но, к сожалению, я почти уверен, что нет способа добиться того, что вы ищете. Поскольку поведение не является встроенным, приложения теперь не знают, как с ним справиться, даже если вы можете его активировать.Якуб Розточил
бассим