Удаление строк кода в текстовом редакторе

Редактировать: Этот вопрос был помечен как «Толстой» в знак признательности за качество и объем моего письма :) Достаточно просто прочитать первый и последний абзацы :) Если вы склонны выделять и перемещать код с помощью мыши, вещи посередине может быть вам интересно.

Это вопрос о том, как вы вообще используете текстовые редакторы. Я ищу лучший способ Удалить множества строк кода (нет намерения запатентовать его :) Это распространяется на строки перенос, то есть удаление и добавление их где-то еще. Самое главное, я не хочу создавать пустые строки, которые придется удалять отдельно. Вроде как функция 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!

В последнем абзаце; Я ищу хороший способ удалять и перемещать строки кода.

ephemer 13.09.2008 21:13

Думаю, вам следует пометить вопрос, чтобы включить Emacs, Eclipse и VIM.

Nathan Fellman 13.09.2008 21:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
2
4 721
11

Ответы 11

В Emacs:

  • линия убийства C-k
  • транспонировать линии C-x C-t

C-a C-k C-k - уничтожить всю строку, включая новую строку (или kill-whole-line с помощью C-S-backspace).

C-u <число> C-k - уничтожить <число> строк (включая новые строки).

C-y - вернуть последний убитый текст (также известный как вставка)

В Eclipse вы можете использовать ALT- или ALT- для перемещения строки. Я считаю это невероятно полезным, а также ALT-SHIFT- {, } для копирования строки. Кроме того, это не разрушает ваш буфер обмена. Он даже исправляет отступы при движении линии!

В VIM:

  • Удалите всю строку, включая новую строку: dd
  • Транспонировать строки: dd p

Вы всегда можете добавить к любой команде номер, чтобы повторить ее, поэтому для удаления 10 строк выполните:

10 dd

Вы также можете указать диапазон удаляемых строк. Например, чтобы удалить строки 10-15:

:10,15d

Или вы можете переместить строки, например, переместить строки на 10-15 ниже строки 20:

:10,15m20

Или вы можете копировать строки:

:10,15t20

Научитесь пользоваться клавишами курсора.

Для движущихся линий я делаю следующее:

  1. Используйте / , чтобы перейти к строке, которую вы хотите скопировать.
  2. Нажмите Home, если его еще нет, и еще раз, если он помещает курсор после пробела.
  3. Затем нажмите Shift + , чтобы выбрать строку (или строки), которые вы хотите переместить.
  4. Ctrl + X, чтобы сократить линию.
  5. Переместитесь вверх / вниз к строке, которую хотите вставить
  6. Ctrl + V

Это должно работать практически в любом текстовом редакторе Windows.

При удалении строк я по-прежнему предпочитаю использовать Ctrl + X (хотя, думаю, я также использую backspace), поскольку вышесказанное так укоренилось в том, как я редактирую, и к тому же более снисходительно.

(Хотя я нахожу их дезориентирующими в тех случаях, когда я использую Mac, я думаю, что Apple могла что-то понять из-за того, как они настроили Home / End, ярлыки пропуска слов на Mac)

update, теперь я использую сочетания клавиш vim (в Emacs с использованием evil-mode :)

Sam Hasler 14.02.2013 16:08

Что я делаю, так это начинаю с курсора в начале строки (в некоторых редакторах вам нужно дважды нажать домой, чтобы сделать это), удерживая 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 вместе с любой командой перемещения курсора для удаления из текущей позиции курсора в новую позицию. Например, чтобы удалить ...

  • ... до конца абзаца (обычно означает «до следующей пустой строки»): d}
  • ... строка, содержащая курсор и следующие 5 строк: d5j
  • ... набор круглых скобок, фигурных скобок и т. д. и его содержимое: d% (с курсором на открывающей или закрывающей скобке / скобке и т. д.)
  • ... до третьего появления слова "foo": d3 / foo

Это довольно гибко.

Ctrl + Shift + L удаляет строку, не копируя ее в буфер.

В Emacs, помимо C-kC-k с числовым префиксом arg, чтобы уничтожить N строк), вы можете просто использовать мышь:

  • Чтобы убить одну строку: трижды щелкните по нему, затем дважды щелкните правой кнопкой мыши

  • Чтобы убить несколько строк: трижды щелкните первую строку, затем щелкните правой кнопкой мыши последнюю строку («первая» строка может быть после «последней» строки - «первая» здесь означает первую, которую вы щелкнули)

Другие вопросы по теме