Удаление строк кода в текстовом редакторе - PullRequest
0 голосов
/ 13 сентября 2008

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

Этот вопрос о том, как вы используете текстовые редакторы в целом. Я ищу лучший способ удалить множество строк кода (нет намерения запатентовать его :) Это распространяется на транспонирование строк, то есть удаление и добавление их где-то еще. Самое главное, я не хочу создавать какие-либо пустые строки, которые я должен удалить отдельно. Вроде как функция SHIFT + DELETE в Visual Studio, но работает для нескольких строк одновременно.

Допустим, вы хотите удалить строку 3 из следующего кода (также отображаются вкладки и переводы строк). Наивным способом было бы выделить текст в угловых скобках:

if (true) {\n
\t int i = 1;\n
\t <i *= 2;>\n
\t i += 3;\n
}\n

Тогда нажмите 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: хорошая навигация с помощью клавиш курсора.

Решение, которое лучше всего подходит для моего стиля перехода и редактирования кода, - это Eclipse way:

YВы можете выбрать несколько последовательных строк кода, где первая и последняя выбранные строки могут быть выбраны только частично. Нажатие ALT + {вверх, вниз} перемещает все строки (а не только выделение) вверх и вниз, исправляя отступы по мере продвижения. Нажатие CTRL + D полностью удаляет строки (не только выделение), не оставляя ненужных пустых строк. Я бы хотел увидеть это в Visual Studio!

Ответы [ 11 ]

4 голосов
/ 13 сентября 2008

В VIM:

  • Удалить всю строку, включая новую строку: dd<code></li> <li>Transpose lines: <code>dd p<code></li> </ul> <p>You can always prefix any command with a number to repeat it, so to delete 10 lines do:</p> <pre>10 dd

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

    :10,15d
    </code>

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

    :10,15m20
    </code>

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

    :10,15t20
    </code>
4 голосов
/ 13 сентября 2008

В Emacs:

  • kill-line C-k
  • транспонированные линии C-x C-t

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

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

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

3 голосов
/ 13 сентября 2008

Что я делаю, начинаю с курсора в начале строки (в некоторых редакторах для этого нужно дважды нажать клавишу home), удерживаю Shift и нажимаю, пока не будут выбраны все строки, которые я хочу удалить. Затем я нажимаю удалить.

2 голосов
/ 13 сентября 2008

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

1 голос
/ 29 сентября 2008

Добавляя к существующему ответу vim, вы можете использовать d вместе с любой командой перемещения курсора для удаления из текущей позиции курсора в новую позицию. Например, чтобы удалить ...

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

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

1 голос
/ 13 сентября 2008

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

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

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

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

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

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

0 голосов
/ 18 декабря 2013

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

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

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

0 голосов
/ 06 апреля 2011

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

0 голосов
/ 29 сентября 2008

В дополнение к вышесказанному, используйте Resharper для Visual Studio, чтобы делать то, что вы хотите. Лучший плагин VS вы найдете когда-либо. Он предоставляет кучу разных команд, которые помогают перемещать / удалять / копировать код здесь и везде. Не говоря уже о рефакторинге / генерации / и т.д. кода.

Ctrl - Shift - Alt или & darr; будет перемещать метод вверх или вниз , вверх или вниз и т. д. Shift - Del - удаляет текущую строку, но помещает ее в буфер обмена (если вы не измените свои настройки, чтобы этого не делать - я пытаюсь вспомнить, если это стандарт VS ярлык, а не только Resharper - слишком долго). Ctrl - C , Ctrl - X без выбора копирует / обрезает текущую строку. И так далее ...

См. Полный список http://www.jetbrains.com/resharper/docs/ReSharper40DefaultKeymap2.pdf.

0 голосов
/ 22 сентября 2008

в Eclipse я использую CTRL + D , чтобы удалить одну строку (или пару) для многих строк я выделю их мышью или SHIFT + СТРЕЛКА , затем нажмите клавишу DEL .

...