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

10

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

AAA | {BBB CCC

DDD} EEE FFF

создать выбор


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

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

AAA BBB CCC | {

DDD} EEE FFF


Я могу уменьшить выделение слов :

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


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

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

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

AAA {BBB CCC

DDD EEE FFF} |

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


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

Я на OSX Yosemite 10.10.2, но я думаю, что эта проблема была там, пока я себя помню.

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

Ответы:

1

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

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

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

Tetsujin
источник
Что это значит? «Множественный выбор текста».
Николас Барбулеско
1

Итак, как я вижу, текстовая навигация в 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 идут в начало и конец документа, а не переходят по страницам.
Николас Барбулеско
1
@NicolasBarbulesco Вы совершенно правы, я написал «документ» всего лишь одной строкой раньше, не знаю, почему я написал «страницы» дальше. Исправлено сейчас.
Asmus