Переміщення ярлика вгору / вниз у Visual Studio 2012


76

У VS2010 у мене було встановлено ярлик Alt+ Up/Downдля переміщення рядків коду вгору або вниз, як і раніше в Eclipse за моїх днів Java.

Тепер, оскільки Електроінструменти та макроси (саме так я налаштував цей ярлик у VS2010) недоступні у VS2012, як я можу це зробити?

Я бачив, як хтось згадував, що Resharper може це зробити, але для любові до вогню та води я не можу знайти імена команд у списку команд, які можуть це зробити. Я спробував ReSharper_MoveUp / MoveDown, і це не рухає рядки вгору / вниз:

Команда Move_Up не зробила трюку

Це переміщує блоки тексту вгору та вниз. Я просто хочу рядок за рядком вгору чи вниз, ніякої химерної логіки там немає. Раніше

Що я маю

Після ALT+ Up(коли курсор знаходиться на рядку WriteLine), я хотів би побачити це:

Рядок переміщений на одну вгору, всередині дужки, з відступом

Я бачив ці теми: що еквівалентно ALT + ВГОРУ / ВНИЗ (переміщення рядка) у затемненні у Visual Studio? , Visual Studio: гарячі клавіші для переміщення ліній вгору / вниз і переходу через останні зміни , але жодне із запропонованих рішень не працює у VS2012.

Будь-які інші ідеї?

UPD 7 листопада 2012 р .: . Розширення наздоганяють Visual Studio 2012. Тепер я знаю щонайменше 3 розширення, які забезпечують цю функціональність:

UPD 15 листопада 2012: Щойно натрапив на інше розширення, яке стверджує, що виконує те, що тут потрібно. Однак не пробували: LineMan Extension

UPD 10 травня 2015 р. Щойно встановлено VS2015 RC, і це вже вбудовано: MoveLineUp / Down


2
Вийшов FYI PowerTools 2012 , і це вже зараз.
Carl G

Це також стосується atmel Studio 7 для переміщення ліній вгору та вниз.
Cutton Eye

Відповіді:


34

Оновлення: вигуки радості, продуктивність PowerTools VS2012 тепер доступний і пропонує цю функціональність (поряд з іншим особистим фаворитом, Tools.AddEndTokenAtTheEnd.)

Розширення MoveLine (сумісне з VS 2012; мені довелося перезапустити VS вручну, щоб побачити команди в інструменті комбінації клавіш VS).


3
Коли ви налаштовуєте комбінацію клавіш, зробіть область "Текстовий редактор".
Youngjae

Тут ключовим фактором успіху є те, що ваш ярлик повинен охоплювати текстовий редактор, І вам потрібно ВИДАЛИТИ (ВИДАЛИТИ) вже призначені комбінації клавіш. Якщо у вас є resharper, вам потрібно видалити "Resharper.Resharper.GoToNextMethod" і "..GoToPrevMethod" (зверніть увагу, що можуть бути два ярлики (XAML і текстовий редактор), які потрібно видалити.
kingdango

@Carl G - Чи є спосіб пересуватися горизонтально за допомогою ярлика? як Alt + Вгору чи Alt + Вниз?
Sasan K

57

Для тих, хто вирішив це питання за допомогою Visual Studio 2013 або новішої версії, ця функція вбудована безпосередньо в програму. Просто використовуйте AltUpта AltDownдля переміщення рядка курсором - або вибраними рядками - вгору та вниз.

Якщо ви хочете пересвязать його в Інструменти > Параметри > Довкілля > Клавіатура , клавіші Edit.MoveSelectedLinesUpі Edit.MoveSelectedLinesDown. Можливо, вам доведеться спочатку видалити нову комбінацію з інших існуючих клавіш.


Питання було про 2012 рік.
trailmax

20
@trailmax Я знаю, і це вже отримало свої відповіді, але я публікую це, щоб люди, які використовують 2013 рік, могли знати, що це вже існує, щоб вони не йшли шукати далі, як мені довелося.
Ківон

@RayL Можливо, ти відбиваєш ці ключі до чогось іншого?
Ківон

4
@RayL Edit.MoveSelectedLinesUpта Edit.MoveSelectedLinesDown. Будь ласка, повідомте нам, якщо це працює для вас.
Ківон,

1
@keavon, Це працює, але з якихось причин я не можу призначити цій команді "Atl + стрілка вгору" .... можливо, це має щось спільне із встановленим resharper або powertools. Я думаю, це те, що спочатку мене спантеличило. Непарні "ctrl + alt + стрілка вгору" чудово працює! Дякую.
RayLoveless

10

Встановіть ReSharper.

Відкрийте Інструменти -> Параметри -> Навколишнє середовище -> Клавіатура (як показано на малюнку)

  1. Знайдіть "ReSharper.ReSharper_MoveUp"
  2. У "Використовувати новий ярлик у:" виберіть: "Текстовий редактор"
  3. Клацніть на "Натисніть комбінацію клавіш:" і натисніть ярлик (наприклад, Alt + ArrowUp)
  4. Натисніть кнопку "Призначити" Те саме, що і з "ReSharper.ReSharper_MoveDown"

PS чудово працює для окремих рядків та декількох виділених рядків, але видаляє виділення після переміщення 1 рядка. Сподіваюся, є спосіб перемістити кілька рядків кілька разів за один вибір.


2
ні, resharper намагається бути надто корисним і цього разу занадто наполягає. Він переміщує блок коду з поточним рядком. І все, що я хочу, це просто перемістити одну лінію вгору або вниз, а не пов'язаний блок.
trailmax

Для мене команди "ReSharper.ReSharper_MoveUp" і "ReSharper.ReSharper_MoveDown" переміщує лише один поточний рядок, якщо відсутній вибір, навіть всередині блоку. Не впевнений, чому у вас це по-іншому. Я використовую ReSharper 7.0.97.60 та VS 2012 RTM від MSDN.
Іван Аксаментов - Крапля

2
Прикладом, коли це не працює, є usingвипадок, який з’являється у верхній частині файлу, і користувач хоче перемістити вираз вниз на кілька рядків, щоб потрапити у namespaceвизначення. Використання команди MoveDown R # працює коректно протягом декількох ітерацій, поки usingоператор не з'явиться під namespaceрядком. Тепер наступна ітерація спробує перемістити простір імен нижче поточного блоку.
Carl G

7

Якщо у вас є Resharper, ви можете вдарити Ctrl +Shift + Alt+, щоб перемістити поточну лінію вгору. або Ctrl+ Shift+ Alt+ для переміщення на один рядок вниз.

Це працює у VS 2012 Premium із схемою клавіатури Visual Studio у Resharper 7 (точніше 7.0.97.60).

Редагувати: це відображається для команд 'ReSharper.ReSharper_MoveUp' / 'MoveDown'.


1
Це у мене чомусь не працює. У мене точно такий самий перефарбовувач і відображення тих самих команд. І всякий раз, коли я намагаюся перемістити рядки вгору / вниз, вони стрибають по-божевільному: іноді вгору в інший метод, іноді внизу під наступним блоком. Але не те, що я хочу - (
trailmax

Юпс - я це бачив, хоч і трохи пізно. Ви спробували скинути налаштування клавіатури? Можливо, ярлики зіставляються з іншою командою? На вашому знімку екрана написано, що він зіставлений для XAML, чи можете ви побачити, чи він також відображений для тексту?
YetA AnotherUser

Так, перевірив текстовий редактор. Насправді я щойно переінсталював VS2012 та Resharper, і в ньому встановлено відображення за замовчуванням. Ваші ярлики працюють, але вони не рухаються на одну лінію вгору або вниз - переміщують блок вгору або вниз - (
trailmax

Він переміщує повний блок коду, якщо курсор розміщений на рядку початку / закінчення коду. Ви намагалися виділити весь рядок, а потім спробувати ярлик?
YetA AnotherUser

6

У Visual Studio 2017 (принаймні) я маю нижче

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


Це у VS2019, де ви показуєте, але клавіші не були зіставлені (принаймні в моїй інсталяції). Довелося зіставляти ключі вручну.
ΩmegaMan

2

Ви можете використовувати розширення Move Line Command .

Просто дотримуйтесь коментаря formula349:

Я зміг отримати цю роботу з 2012 року як є.

Перейменуйте пакет у .zip і розпакуйте всі файли в папку. Відредагуйте файл extension.vsixmanifest і знайдіть вузол XML SupportedProducts. Змініть Version = "10.0" на Version = "11.0".

Повторно заархівуйте вміст папки та перейменуйте назад у .vsix. Чудово працює!



Вибачте гію. Я пропустив вашу відповідь - не був у відпустці і з якихось причин не отримав повідомлення.
trailmax

2

Хоча багато людей, здається, рекомендують різне. Visual Studio Extensions і Resharper, я хотів би зазначити, що існує рідна мова що для досягнення цієї мети гаряча клавіша. Я прийшов до цього питання, намагаючись знайти відповідь, оскільки мій Resharper замінив мої гарячі клавіші за замовчуванням на їх версії MoveUp та MoveDown.

І хоча гарячі клавіші Решарпера рухають речі вгору і вниз, це не так те, що шукав оригінальний плакат, і не те, що я хотів. Ці гарячі клавіші переміщують методи та блоки коду, а не окремі рядки.

Visual studio має дві команди гарячих клавіш для переміщення вибраних рядків вгору або вниз. Ці гарячі клавіші:

  • Edit.MoveSelectedLinesDown
  • Edit.MoveSelectedLinesUp

Однак я використовую Visual Studio 2013, тому я не знаю, чи існують вони у попередній версії. Якщо у 2012 році немає цих гарячих клавіш, можливо, розширення є єдиним рішенням.

У будь-якому випадку, у мене виникла проблема з пошуком точної гарячої клавіші в списку візуальної студії, і знадобилося багато часу, щоб знайти їх, тому я сподіваюся, що моє рішення вдається допомогти комусь іншому в подібній ситуації, як моя.


Так, їх не існувало у VS2012. І друга відповідь стверджує, що VS2013 їх має.
trailmax

Проповідуйте! У моїй теперішній компанії Resharper не споглядають, тому я намагаюся обійти це ... після видалення Resharper всі мої ярлики розірвані :(
Eleanor Zimmermann

1

Shift+ Delа потім Ctrl+V

Shift+ Delвиконує операцію вирізання (те саме, що і Ctrl+ X) на поточному рядку, на якому розміщений курсор.

Тоді ви можете використовувати Ctrl+, Vщоб вставити його в будь-яке місце, яке вам подобається.

Добре, що вам не потрібно вибирати повний поточний рядок , просто курсор повинен бути розміщений на рядку.

Недоліком використання цього ярлика є те, що ви не зможете побачити лінію, яка рухається (вгору або вниз) жваво перед очима.


0

Ярлики переміщення вгору та вниз ReSharper розумні - замість того, щоб просто переміщати поточний рядок (що може легко призвести до непрацездатного коду), він буде переміщувати поточний вислів вгору та вниз у списку виразів, що складають тіло методу. Це набагато потужніше, ніж просто переміщення одного рядка коду.

Але це не допомагає вам отримати вашу заяву всередині ifблоку. Тут потрібно зробити одну з двох речей.

По-перше, перенесіть заяву вище в ifблоці, а потім використовувати Ctrl+ Shift+ Alt+ Rightпроштовхнути його вниз в області. Вираз тепер буде всередині ifблоку, і ви можете використовувати його вгору та вниз, щоб переміщати його туди. Ви також можете скористатися Ctrl+ Shift+ Alt+, Leftщоб витягнути його в область дії поза межами ifблоку.

Крім того, ви можете розмістити текстову касету на зовнішній стороні фігурної дужки ifблоку та скористатися Ctrl+ Shift+ Alt+ Downдля переміщення фігурної дужки вниз, переходячи через наступні оператори, включаючи їх всередині ifблоку.

Ці клавіші можуть зробити набагато більше, ніж просто перемістити одне твердження. Якщо ви покладете текстову каретку на декларацію методу або класу, Upі Downперенесете всю декларацію методу або класу вгору та вниз. Якщо ви введете текстову каретку до списку параметрів методу Leftі Rightпереставите окремі параметри (а потім Alt+Enter може викликати рефакторинг Змінити підпис).

Детальніше на сторінках довідки .


2
Ярлики, які намагаються бути «розумними» - це проблема R #. Багато разів мені просто потрібно рухати лінію вгору або вниз, нічого спільного з розмахом чи фігурними дужками.
trailmax

Ну, якщо вам не цікаво зрозуміти, як працюють команди, про які ви запитували, то я не можу допомогти. ReShaprer не "намагається" бути розумним, він розуміє структуру вашого коду і допомагає вам переставити його. Використовуйте власні команди редактора для редагування простого тексту. Це не "проблема" ReSharper - вона надає вам інструменти, ви можете або навчитися цьому, і використовувати його, або використовувати щось інше.
Citizensmatt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.