Строка дублирования / удаления Xcode

Исходя из Eclipse и постоянно использовавшегося для дублирования строк, довольно странно узнать, что Xcode не имеет такой функции. Или нет?

Я знаю, что можно изменить общесистемные сочетания клавиш, но это не то, что мне нужно.


person Summer    schedule 15.02.2009    source источник
comment
возможный дубликат Xcode: горячая клавиша удаления строки   -  person joshperry    schedule 20.11.2011
comment
эта настройка работает для stackoverflow.com/a/34195483/1348522   -  person Zumry Mohamed    schedule 29.03.2018
comment
Я постоянно впечатлен тем, насколько плох XCode дан, сколько разработок Apple вкладывает в него.   -  person Andy Ray    schedule 05.09.2020


Ответы (22)


Весь смысл в том, чтобы НЕ использовать ярлыки _1 _ / _ 2_. У меня такая же проблема с IntelliJ, и возможность просто дублировать строки с помощью Cmd-D и удалять их с помощью Cmd-Y - это большая экономия времени.

С тех пор меня это беспокоит. Однако похоже, что кто-то другой нашел решение, которое работает.

Короче говоря, создайте файл ~/Library/KeyBindings/PBKeyBinding.dict со следующим содержимым и перезапустите Xcode.

{
    "^$K" = (
        "selectLine:",
        "cut:"
    );

    "^$D" = (
        "selectLine:",
        "copy:",
        "moveToEndOfLine:",
        "insertNewline:",
        "paste:",
        "deleteBackward:"
    );
}

Это создаст два ярлыка: Ctrl - Shift - K для удаления текущей строки и Ctrl - Shift - D для дублирования текущей строки. Обратите внимание, что это будет только работать, если вы НЕ используете настраиваемую привязку клавиш, установленную в Xcode. Переключитесь на «XCode Default», и все должно работать. Проверено на XCode 3.2 на Snow Leopard.

Дополнительная информация о привязках клавиш Mac OS X: http://funkworks.blogspot.it/2013/03/republishing-of-wwwerasetotheleftcompos.html

person Frank Schröder    schedule 04.10.2009
comment
Это должен быть настоящий ответ. Кстати - если вы хотите импортировать ярлык cmd-d (удалить строку) из Eclipse, вам нужно сначала изменить ярлык Добавить закладку в меню редактирования в XCode - person Chris R; 07.08.2010
comment
@joshperry, что-нибудь, что работает с Xcode 4+? Команда DuplicateEdit -> Duplicate) всегда отображается серым цветом (и не предназначена для дублирования строки). - person Blaz; 21.04.2012
comment
Я использую OS X с первого дня и никогда не знал о привязках клавиш. какая классная функция. Взгляните на этот очень хороший редактор привязок клавиш графического интерфейса, с которым я столкнулся. - person Alex Gray; 31.08.2012
comment
Нашел дополнительную информацию на сайте разработчиков Apple. - person aleclarson; 25.02.2014
comment
звучало отлично, но похоже, что у меня это не сработало в Xcode 5.0.2 :( - person voghDev; 06.07.2014
comment
Для XCode 10.1 мне пришлось использовать следующую последовательность команд (для ^ $ D): moveToBeginningOfLine :, deleteToEndOfLine :, yank :, insertNewline :, setMark :, moveToBeginningOfLine :, selectToMark :, yank: - person marcelosalloum; 09.01.2019

Чтобы удалить строку: Ctrl - A, чтобы перейти в начало строки, затем < kbd> Ctrl - K, чтобы удалить его, а в другой раз Ctrl - K удалить пустую строку. (Я не использую Xcode очень часто, но я привык к этому в Emacs и других текстовых вводах с привязками, подобными Emacs, и, похоже, это работает и в Xcode.)

И чтобы продублировать строку: я не знаю многих программ, в которых есть команда для этого, но обычно я просто использую Copy + Paste - в Xcode это похоже на CUA: Ctrl + A для перехода к началу строки, Shift + , чтобы выбрать его, Command + C для копирования и Command + * V для дважды вставки (один раз переопределив строку и один раз добавив к ней).

(от человека, который все время набирает и редактирует текст, так часто в разных программах, и иногда злится из-за того, что ему приходится отвлекать себя тупым виджетом, делая небольшую поправку во вводе текста, что он просто не может не запоминать эти последовательности и привычки)

person Tom Alsberg    schedule 15.02.2009
comment
Это будет работать во всех приложениях, использующих какао для ввода текста, поскольку это функция текстовой системы какао. Есть еще много таких ярлыков, их список можно найти здесь: hcs.harvard.edu/~jrus/Site/System%20Bindings.html :) - person Ahti; 01.11.2011
comment
'yank' должен быть ctrl + Y на современных компьютерах Mac. - person CarmeloS; 24.12.2013
comment
Command-V, чтобы вставить его и изменить отступ. Control -Y также вставит, но не изменит отступ вставленного текста. - person Scott Gardner; 16.06.2015

Удалите строку типа eclipse CTRL + D (проверено в Xcode 4.5.1):

Прежде всего, измените эти права:

sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/

Откройте /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist с самим Xcode и добавьте эту новую запись:

deleteToBeginningOfLine:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteBackward:, moveDown:, moveToBeginningOfLine:

введите описание изображения здесь

Перезапустите Xcode и откройте Xcode> Настройки> KeyBindings. Найдите свой макрос и определите комбинацию клавиш:

введите описание изображения здесь

person Opena    schedule 24.10.2012
comment
Если вы хотите добавить способ дублирования строки, сделайте то же самое, но при вставке нового значения в файл IDETextKeyBindingSet.plist вставьте этот код selectLine :, copy :, moveToEndOfLine :, insertNewline :, paste :, deleteBackward :. - person jollyr0ger; 13.04.2013
comment
+1 Это решение работало, но в Xcode 4.6.1 ^ D конфликтует с другими существующими привязками клавиш. - person bernardn; 12.05.2013
comment
Как вы можете получить это для «Дублировать текущую строку»? - person Markus; 11.04.2014
comment
Это не работает в xcode 6. Из списка вызывается только первая функция. - person Mrug; 25.02.2015
comment
Мне это нравится, работает для меня как шарм под XCode 6.3.1. - person cthulhu; 06.05.2015
comment
Это правильный ответ! легко и работает как шарм! - person Jordi Puigdellívol; 20.11.2016
comment
Удалить строку работает в Xcode 8.3.2, но после выполнения команды раздается звуковой сигнал. Как от этого избавиться? - person geoff; 31.05.2017
comment
Для XCode 10.1 мне пришлось использовать следующую строку: moveToBeginningOfLine :, deleteToEndOfLine :, yank :, insertNewline :, setMark :, moveToBeginningOfLine :, selectToMark :, yank: - person marcelosalloum; 09.01.2019
comment
Есть ли способ сделать так, чтобы эта строка дублировала всю строку, даже если она была обернута несколько раз? Более длинные строки кода дойдут до конца строки с номером строки, и любой обернутый код не будет дублироваться. - person se_puede_dev; 10.01.2019

Я попробовал решение для привязки клавиш, но не смог заставить его работать. Однако редактирование привязок клавиш XCode работает как шарм. Вот как я это сделал.

Это решение не изменяет содержимое буфера обмена!

Откройте привязки клавиш XCode:

alt text

В диалоговом окне редактирования пользовательских сценариев:

  1. Дублируйте скрипт "Move Line Down" и переименуйте его.
  2. Дублируйте файл «Move Line Down.scpt», переименуйте скрипт, выберите файл с помощью (двойным щелчком) в редакторе скриптов.
  3. Отредактируйте сценарий (открывается «Редактор AppleScript») и удалите отрывок «удалить (абзацы от startLine до endLine)».
  4. Если вы не хотите перезапускать XCode, похоже, вам нужно удалить и повторно добавить скрипт. Убедитесь, что для параметра «Вывод» установлено значение «Отменить вывод», иначе в исходном файле будет «(ноль)».
  5. Я немного изменил скрипты, чтобы выбрать правильные строки:

Повторяющаяся очередь:

using terms from application "Xcode"
tell first text document
    set {startLine, endLine} to selected paragraph range

    if startLine > 1 then
        set theText to (paragraphs startLine through endLine)
        set theText to (theText as string)
        make new paragraph at beginning of paragraph (startLine) with data theText
        set selected paragraph range to {endLine + 1, endLine + endLine - startLine + 1}
    else
        beep 1
    end if
end tell
end using terms from

Повторяющаяся линия вниз:

using terms from application "Xcode"
tell first text document
    set {startLine, endLine} to selected paragraph range
    if endLine < (count paragraphs) then
        set theText to (paragraphs startLine through endLine)
        set theText to (theText as string)
        (* delete (paragraphs startLine through endLine) *)
        make new paragraph at beginning of paragraph (endLine + 1) with data theText
        set selected paragraph range to {startLine, endLine}
    else
        beep 1
    end if
end tell
end using terms from

alt text

person leviathan    schedule 27.10.2010
comment
Это явно не упомянуто выше, но существуют сценарии для удаления строки, перемещения строки вверх и перемещения строки вниз. У принятого ответа есть недостаток, заключающийся в том, что он работает только в том случае, если для ваших сочетаний клавиш установлено значение XCode по умолчанию. Использование скриптов позволяет вам сохранять ваши индивидуальные сочетания клавиш, поскольку сочетания клавиш для скриптов обрабатываются отдельно от таковых для остальной части XCode. - person Pathogen; 04.11.2012

Хорошо, у меня это работало какое-то время, а потом внезапно сломалось. Теперь я объединил здесь разные сообщения и нашел решение, которое работает для XCode 6.3.1.

  1. Перейдите к /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/ с помощью Finder.

  2. найдите папку с именем Resources. Щелкните правой кнопкой мыши по нему, нажмите «Получить информацию», разблокируйте настройку общего доступа и разрешений (нажав на замок) и установите для всех значение «Чтение и запись».

  3. Войдите в папку и найдите файл IDETextKeyBindingSet.plist. Щелкните правой кнопкой мыши по нему, нажмите «Получить информацию», разблокируйте настройку общего доступа и разрешений (нажав на замок) и установите для всех значение «Чтение и запись».

  4. Откройте файл с помощью XCode (по умолчанию)

  5. Найдите удаления, щелкните правой кнопкой мыши и добавьте новую строку. Назовите его, например, Удалить строку. В поле значения введите: selectLine:, deleteBackward:. (Это также можно сделать для повторяющейся строки: selectLine:,copy:,moveToEndOfLine:,insertNewline:,paste:,deleteBackward:)

  1. Запустите XCode, перейдите в настройки / привязки клавиш и найдите Удалить строку. Установить ярлык. Наслаждаться.
person Joakim    schedule 21.05.2015

Чтобы удалить строку в Xcode 10.1, следуйте инструкциям на снимке экрана ниже, чтобы добавить горячую клавишу.

введите описание изображения здесь

person Gagandeep Gambhir    schedule 29.11.2018

Поскольку Xcode 4 затрудняет реализацию с использованием привязок клавиш, я прибег к использованию Keyboard Maestro (Quickeys тоже должен работать хорошо, но он не полностью совместим с Lion). Например, вот мой ярлык Keyboard Maestro (привязанный к ⌘-⇧-D):

http://bit.ly/thC6yf

person raheel    schedule 20.11.2011
comment
Купите сейчас за 36 долларов ... что за воровство) лол ... пока я не увидел это на сайте Maestro, я подумал, что это может быть хорошим решением - person ycomp; 28.02.2012
comment
@ycomp, вот бесплатное решение. - person Blaz; 27.01.2013

Мы используем Xcode 9.0, и сочетания клавиш все еще не работают. Вздох.

Я нашел эту суть очень полезной, поэтому перепубликую ее здесь для дальнейшего использования:

  1. Открыть /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
  2. Добавьте следующий фрагмент XML в этот файл чуть выше нижнего </dict>
  3. Перейдите в настройки Xcode -> Привязки клавиш -> вкладка Текст -> Прокрутите, пока не увидите Дублирование
  4. Нажмите «Дублировать текущую строку», добавьте для нее ярлык, например. Cmnd + D (разрешить любые повторяющиеся привязки)
  5. Открыть Xcode

<key>Duplication</key> <dict> <key>Duplicate Current Line</key> <string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string> <key>Duplicate Lines</key> <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string> <key>Delete Line</key> <string>selectLine:, deleteBackward:</string> </dict>

person Jannie Theunissen    schedule 17.10.2017
comment
Он говорит: этот файл заблокирован - person SardorbekR; 17.02.2021

Я знаю, что этот поток довольно старый, но я нашел другое решение, используя BetterTouchTool, вы можете выполнить Ctrl + A, Ctrl + K, Ctrl + K последовательность одним ярлыком, настроив в BTT так:

введите описание изображения здесь

(Используйте кнопку «Добавить дополнительное действие», чтобы добавить второй и третий ярлыки)

PS: Исходя из Eclipse, где Cmd + D - это строка удаления ^^

person Laurent Meyer    schedule 18.02.2015

Используйте пользовательские скрипты.

Пока есть скрипты для перемещения и удаления строк. Вы должны определить привязки клавиш для этих скриптов (меню Скрипты -> Редактировать пользовательские скрипты ... в xCode 3.2).

Чтобы продублировать строку, вы должны написать свой собственный скрипт. Но это очень просто! Дублируйте скрипт «Переместить строку вниз» и удалите строку, удаляющую выделенный текст:

delete (paragraphs startLine through endLine)
person Damien Flament    schedule 22.08.2010

Трижды щелкните, чтобы выделить всю строку, command-c, чтобы выбрать, и command-v дважды, чтобы скопировать ее. Это не функция Xcode, это просто часть ОС.

person Paul Tomblin    schedule 15.02.2009
comment
Щелчок мышкой и еще хуже, тройной? Это определенно не то решение, которое ищут люди, желающие использовать сочетания клавиш. - person User; 01.09.2012

Решение для дублирования строк XCode4 в здесь

Я также добавил удаление строки в список:

<key>Remove Line</key> <string>selectLine:, deleteBackward:</string>

person MartinMcB    schedule 27.04.2012

Нет необходимости изменять Xcode. Вы можете просто использовать расширение Xcode Linex

введите описание изображения здесь

person Alaeddine    schedule 20.10.2017
comment
классно ! отличное решение - person Thomas Besnehard; 08.11.2017

Решение от damien.flament отлично работает, и вам может потребоваться установить вывод в «Отменить вывод» см. рис. ниже.

Настройка пользовательских скриптов

P.S: Не знаю, как прокомментировать его ответ.

person palaniraja    schedule 25.08.2010

Как сказано выше, закройте XCode и вставьте следующее в ~/Library/Application Support/Xcode/Key Bindings/ <user>.pbxkeys внутри <dict> в разделе <key>text</key>:

    <key>^D</key>                                                                                                      
    <array>                                                                                                            
        <string>moveToLeftEndOfLine:</string>                                                                               
        <string>deleteToEndOfLine:</string>                                                                                      
    </array>                                                                                                           
    <key>^K</key>                                                                                                      
    <array>                                                                                                            
       <string>selectLine:</string>                                                                               
       <string>copy:</string>                                                                                     
       <string>moveToEndOfLine:</string>                                                                          
       <string>insertNewline:</string>                                                                            
       <string>paste:</string>                                                                                    
       <string>deleteBackward:</string>                                                                           
    </array>

Запустите XCode и наслаждайтесь CTRL - SHIFT - D и CTRL - SHIFT - < kbd> K.
Если вы хотите CTRL - D и CTRL - K, вместо этого используйте ^d и ^k в определениях ключей. Убедитесь, что в файле нет повторяющихся привязок клавиш.

У меня отлично работает с XCode 3.2

person askh    schedule 15.01.2012

Это возможно с помощью BetterTouchTool. CMD + D дублирует строку. Создайте новый ярлык, например:

введите описание изображения здесь

Используйте кнопку «Добавить дополнительное действие», чтобы добавить второй и третий ярлыки.

person Adam Studenic    schedule 28.10.2015

Если вы уже настроили привязки клавиш Xcode, вам придется отредактировать файл: ~/Library/Application Support/Xcode/Key Bindings/<user>.pbxkeys. Просто добавьте два массива (описанных выше) в словарь Root/text.

person MonsieurDart    schedule 16.06.2010
comment
Привет. Я не совсем понимаю это, документ pbxkey - это XML, тогда как файл ~ / Library / KeyBindings / PBKeyBinding.dict, описанный выше, представляет собой полностью другой формат (немного похож на JSON). В документе pbxkeys нет записи Root / text. Это потому, что я использую более позднюю версию? - person Ben Clayton; 09.02.2011

Три шага для удаления текущей строки (смотрите слишком долго, но делайте очень быстро: D)

Cmd + : перейти в конец строки
Cmd + Delete: удалить до начала строки < br> Удалить: удалить пустую строку

person huync    schedule 22.09.2015

Для Xcode 6.1 попал в Xcode> Preferences> KeyBindings> Text И есть «Удалить до конца строки» и назначить желаемый ключ.

person SpyZip    schedule 17.01.2015

Плагин удаления строки XCodePlus - это XCode, который делает это за вас. Он был предварительно установлен с менеджером пакетов Alcatraz ...

https://github.com/payliu/XcodePlus

person Joakim    schedule 23.09.2015

По-прежнему нет встроенного способа дублирования строк, как в Xcode 9. И пользовательские привязки клавиш, похоже, имеют проблемы.

Обновление. Xcode 10.0 beta 6 (10L232m) - то же самое.

person erkanyildiz    schedule 17.10.2017

Перейдите по этому адресу:

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet

а затем скопируйте файл IDETextKeyBindingSet.plist куда-нибудь, а затем откройте скопированный файл и вставьте

selectLine :, copy :, paste :, paste: как это изображение введите здесь описание изображения и сохраните его и замените скопированный файл по этому адресу /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet

затем перезапустите xcode, откройте префиксы xcode, перейдите на вкладку привязки клавиш, найдите повторяющуюся строку (настроенную) и определите для нее короткий ключ, как на изображении ниже

https://i.stack.imgur.com/fCFkX.png

person Khatereh    schedule 21.10.2019
comment
Из обзора: Привет, этот пост, похоже, не дает качественного ответа на вопрос. Пожалуйста, либо отредактируйте свой ответ и улучшите его, либо просто опубликуйте его как комментарий. - person sɐunıɔןɐqɐp; 21.10.2019