Редактировать: Этот вопрос был помечен как «Толстой» в знак признательности за качество и объем моего письма :) Достаточно просто прочитать первый и последний абзацы :) Если вы склонны выделять и перемещать код с помощью мыши, вещи посередине может быть вам интересно.
Это вопрос о том, как вы вообще используете текстовые редакторы. Я ищу лучший способ Удалить множества строк кода (нет намерения запатентовать его :) Это распространяется на строки перенос, то есть удаление и добавление их где-то еще. Самое главное, я не хочу создавать пустые строки, которые придется удалять отдельно. Вроде как функция SHIFT + DELETE в Visual Studio, но работает сразу для нескольких строк.
Скажем, вы хотите удалить строку 3 из следующего кода (также отображаются вкладки и новые строки). Наивным способом было бы выделить текст между угловыми скобками:
if (true) {\n
\t int i = 1;\n
\t <i *= 2;>\n
\t i += 3;\n
}\n
Затем нажмите Backspace. Это создает пустую строку. Еще дважды нажмите клавишу Backspace, чтобы удалить \ t и \ n.
В итоге вы получите:
if (true) {\n
\t int i = 1;\n
\t i += 3;\n
}\n
Когда вы пытаетесь выделить всю строку, Visual Studio не позволяет выбрать завершающий символ новой строки. Например, размещение курсора на строке и нажатие SHIFT + END не приведет к выделению новой строки в конце. Вы также не выберете новую строку, если используете мышь, то есть щелкнув середину строки и перетащив курсор полностью вправо. Вы выбираете завершающие символы новой строки только в том случае, если вы делаете выделение, охватывающее как минимум две строки. Большинство редакторов, которые я использую, делают это таким образом; Microsoft WordPad и Word - контрпримеры (и я часто ошибаюсь при удалении текста из них; по крайней мере, в Word есть способ явно отображать символы конца строки и конца абзаца).
При использовании Visual Studio и других редакторов в целом вот решение, которое мне больше всего подходит:
С помощью мыши я выбираю символы, которые помещаю в угловые скобки:
if (true) {\n
\t int i = 1;<\n
\t i *= 2;>\n
\t i += 3;\n
}\n
Теперь, нажав Backspace, вы удаляете строку за один раз, не удаляя никаких других символов. Это работает сразу для нескольких смежных строк. Кроме того, его можно использовать для транспонирования линий. Вы можете перетащить выделение между угловыми скобками в точку, отмеченную кареткой:
if (true) {\n
\t int i = 1;<\n
\t i *= 2;>\n
\t i += 3;^\n
}\n
Это оставляет вам:
if (true) {\n
\t int i = 1;\n
\t i += 3;<\n
\t i *= 2;>\n
}\n
где строки 3 и 4 поменялись местами.
Есть вариации на эту тему. Если вы хотите удалить строку 3, вы также можете выбрать следующие символы:
if (true) {\n
\t int i = 1;\n
<\t i *= 2;\n
>\t i += 3;\n
}\n
Фактически, это то, что делает Visual Studio, если вы говорите ей выбрать целую строку. Вы делаете это, щелкая поле между вашим кодом и столбцом, где идут красные кружки, обозначающие точки останова. Указатель мыши отражается в этой области, чтобы лучше его различать, но я думаю, что он слишком узкий и физически слишком удален от кода, который я хочу выбрать.
Может быть, этот метод будет полезен и другим людям, даже если он служит им только для того, чтобы они знали, как обрабатываются новые строки при выделении / удалении текста :) Он отлично работает для большинства неспециализированных текстовых редакторов. Однако, учитывая огромное количество функций и плагинов для Visual Studio (которые я использую чаще всего), я уверен, что есть лучший способ использовать его для удаления и перемещения строк кода. Было бы неплохо получить правильный отступ автоматически при перемещении кода между разными блоками (т. Е. Без нажатия «Форматировать документ / выделение»). Жду предложений; без разглагольствования о микрооптимизации, пожалуйста :)
Резюме ответов
Что касается Visual Studio: хорошая навигация с помощью клавиш управления курсором.
Решение, которое лучше всего подходит моему стилю просмотра и редактирования кода, - это способ Затмение:
Вы можете выбрать несколько последовательных строк кода, при этом первая и последняя выбранные строки могут быть выделены только частично. Нажатие ALT + {вверх, вниз} перемещает полные строки (а не только выделение) вверх и вниз, фиксируя отступы по мере продвижения. Нажатие CTRL + D полностью удаляет строки (а не только выделение), не оставляя ненужных пустых строк. Я бы хотел увидеть это в Visual Studio!
Думаю, вам следует пометить вопрос, чтобы включить Emacs, Eclipse и VIM.





В Emacs:
C-a C-k C-k - уничтожить всю строку, включая новую строку (или kill-whole-line с помощью C-S-backspace).
C-u <число> C-k - уничтожить <число> строк (включая новые строки).
C-y - вернуть последний убитый текст (также известный как вставка)
В Eclipse вы можете использовать ALT-↓ или ALT-↑ для перемещения строки. Я считаю это невероятно полезным, а также ALT-SHIFT- {↓, ↑} для копирования строки. Кроме того, это не разрушает ваш буфер обмена. Он даже исправляет отступы при движении линии!
В VIM:
dddd pВы всегда можете добавить к любой команде номер, чтобы повторить ее, поэтому для удаления 10 строк выполните:
10 dd
Вы также можете указать диапазон удаляемых строк. Например, чтобы удалить строки 10-15:
:10,15d
Или вы можете переместить строки, например, переместить строки на 10-15 ниже строки 20:
:10,15m20
Или вы можете копировать строки:
:10,15t20
Научитесь пользоваться клавишами курсора.
Для движущихся линий я делаю следующее:
Это должно работать практически в любом текстовом редакторе Windows.
При удалении строк я по-прежнему предпочитаю использовать Ctrl + X (хотя, думаю, я также использую backspace), поскольку вышесказанное так укоренилось в том, как я редактирую, и к тому же более снисходительно.
(Хотя я нахожу их дезориентирующими в тех случаях, когда я использую Mac, я думаю, что Apple могла что-то понять из-за того, как они настроили Home / End, ярлыки пропуска слов на Mac)
update, теперь я использую сочетания клавиш vim (в Emacs с использованием evil-mode :)
Что я делаю, так это начинаю с курсора в начале строки (в некоторых редакторах вам нужно дважды нажать домой, чтобы сделать это), удерживая Shift и нажимая вниз, пока не будут выбраны все строки, которые я хочу удалить. Затем нажимаю удалить.
Используя отображение клавиатуры Краткий, это делается с помощью Alt + L для маркировки строки и клавиши - на цифровой клавиатуре (или Alt + D) для вырезания строки в буфер обмена. Вырезание полностью удалит строку, включая символ новой строки.
Нажатие клавиши Ins на цифровой клавиатуре вернет строку в документ, включая символ новой строки.
IMHO Краткий - действительно хорошо продуманная раскладка клавиатуры.
PS: Я думаю, что у MSVC есть возможность имитировать краткую раскладку клавиатуры.
в Eclipse я использую CTRL + D для удаления одной строки (или пары) для многих строк я выберу их с помощью мыши или с помощью SHIFT + ARROW, затем нажмите клавишу DEL.
В дополнение к вышесказанному используйте Решарпер для Visual Studio, чтобы делать то, что вы хотите. Лучший плагин VS, который вы когда-либо найдете. Он предоставляет множество различных команд, которые помогают перемещать / удалять / копировать код здесь, туда и везде. Не говоря уже о рефакторинге / генерации / и т. д. Кода.
Ctrl-Shift-Alt↑или ↓ будут перемещать метод вверх или вниз, на строку вверх или вниз и т. д. Shift-Del - удаляет текущую строку, но помещает ее в буфер обмена (если вы не измените свои настройки, чтобы не делать этого - я пытаюсь вспомнить, является ли это стандартным ярлыком VS, а не только Resharper - слишком долго). Ctrl-C, Ctrl-X без выбора копирует / обрезает текущую строку. И так далее...
См. Полный список в http://www.jetbrains.com/resharper/docs/ReSharper40DefaultKeymap2.pdf.
Добавляя к существующему ответу vim, вы можете использовать d вместе с любой командой перемещения курсора для удаления из текущей позиции курсора в новую позицию. Например, чтобы удалить ...
Это довольно гибко.
Ctrl + Shift + L удаляет строку, не копируя ее в буфер.
В Emacs, помимо C-k (и C-k с числовым префиксом arg, чтобы уничтожить N строк), вы можете просто использовать мышь:
Чтобы убить одну строку: трижды щелкните по нему, затем дважды щелкните правой кнопкой мыши
Чтобы убить несколько строк: трижды щелкните первую строку, затем щелкните правой кнопкой мыши последнюю строку («первая» строка может быть после «последней» строки - «первая» здесь означает первую, которую вы щелкнули)
В последнем абзаце; Я ищу хороший способ удалять и перемещать строки кода.