Після копіювання візуального вибору на клавіатуру поверніться у вихідне місце


18

Мій курсор знаходиться в середині абзацу, коли я раптом вирішу, що мені потрібно скопіювати цей абзац:

почати

Тому я набираю vipпункт, щоб обрати візуально абзац:

вибрано

Тепер я намагаюся cmd+Cскопіювати до буфера обміну (це може залежати від вашої системи, але не має стосуватися центрального питання моєї публікації), який залишає мій курсор на початку абзацу:

остаточний

а не бажане положення, яке було там, коли я починав.

Зверніть увагу, така ж проблема виникає і при вибору візуально не yip.

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


11
Так, і мене це дратує. Я просто схильний використовувати для цього позначки: mm "+yap `m(Зверніть увагу, що "+yянки до буфера обміну вашої системи)
fruglemonkey

3
Мені здається корисним розміщувати курсор або на початку, або в кінці зони постригання. Зрештою, що я зараз можу зробити з вирваним текстом і курсором всередині нього? Немає сенсу робити нанесення / вставлення зараз. Але, якщо я хочу це зробити пізніше, це означає, що я міг би також пізніше піти ... можливо, те, що вам зараз потрібно, - це лише позначка.
VanLaser

Відповіді:


14

Можливим рішенням є використання стрибків:

Перед тим, як постригнути або візуально вибрати, ви можете встановити новий стрибок, до якого ви зможете отримати доступ після переміщення курсору. Для цього використовуйте m`.

Потім після того, як ваш курсор перемістився через натискання, використовуйте ctrloдля переходу назад у списку стрибків. Також ви можете побачити список доступних стрибків :jumpsі навігації цього списку з ctrloіctrli

Підсумувати ваш робочий процес було б:

  • m`
  • yip
  • ctrlo

Використовуючи m` набір знака, ви можете перейти до нього за допомогою, ``а не ctrlo.

Ви можете прочитати :h mark-motionsта :h :jumpsотримати додаткову інформацію.


Мені подобається це. Чи є спосіб змусити одиночну цитату поводитись як беккет в цілому при стрибках? одну цитату простіше набрати, і, як правило, я хочу перейти до правильної позиції стовпця, а також до правильної лінії ...
Jonah

1
@Jonah, я карта, <leader>'щоб бути `, що працює досить добре для мене. (Я використовую <space>як свого керівника.)
Нумері каже, що повернеться до Моніки

@Jonah: Як сказав Numeri, картографування може бути хорошим рішенням, інакше, якщо ви хочете позбутися від зворотного вибору, ви можете подивитися :h 'langmap'. Я не кажу, що це ідеальне рішення, але, можливо, воно може бути цікавим для вас.
statox

@Johah, я фактично поміняю одну цитату та зворотній галочку, використовуючи noremap ' ` noremap ` '... Це в моєму vimrc та чудово працює
Niko Bellic

10

Ви можете уникнути переміщення курсору за допомогою:

:'{,'}y

Див :help range, :help mark-motionsі :help :y.


1
Приємно знати про це, але це те, що ви насправді робите? Здається, що введення 8-ти клавіш з двома дужками робить це складніше, ніж рішення марки
Йона

Це я би зробив, якби я був на вашому становищі. Але я не маю жодних проблем з поведінкою, яку ви описуєте, тому я насправді цього не роблю.
romainl

2
@Jonah У вас ще є можливість створити відображення. Щось подібне :nmap <key> :'{,'}y<CR>повинно зробити роботу.
statox

10

Мій курсор знаходиться в середині абзацу

Якщо ви тільки що відредагували його, найпростішим рішенням є введення, g ;який розташуватиме курсор на останній позиції редагування.

І якщо ви не відредагували абзац, ви можете виконати просту операцію заміни тим самим символом, на якому ви є (наприклад, увімкнено h, ви вводите rh), щоб викликати "подія" редагування, фактично нічого не редагуючи.


2
+1: Я завжди використовував '., але це може бути дуже корисно для навігації між останніми змінами з g;і g,.
mMontu

2
Чи є версія, g;яка також приводить вас до правильного положення стовпця?
Йона

@Jonah така поведінка за замовчуванням. Це не працює для вас? Це завжди переводить мене до правильного положення стовпця та рядка.
Ал.Г.

4

ВІМ-EasyClip плагін має налаштування для цього:

g:EasyClipPreserveCursorPositionAfterYank- за замовчуванням 0 (тобто вимкнено). Поведінка Vim за замовчуванням полягає в тому, щоб розташувати курсор на початку вибитого тексту, що відповідає іншим рухам. Однак якщо ви бажаєте, щоб положення курсора залишалося незмінним під час виконання ян, увімкніть цю опцію.

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


0

Розширюючи відповідь Al.G., ми можемо перейти до потрібного місця без редагування. Рішення є gi. Ми дістанемось до тієї ж позиції, де раніше були в режимі останньої вставки.

  • Ви знаходитесь в середині абзацу.
  • перейти в режим вставки.
  • перейти в звичайний режим.
  • натиснути vip.
  • натиснути gi.
  • перейти в звичайний режим. ( giзалишить нам вставити режим)

Якщо ми хочемо перейти до початку або кінця виділеного тексту.

 :help v_o 

Коли ви потягнете виділений текст, ви також повернетесь у звичайний режим, і ви можете або не зможете зберегти початкове положення курсору.

  1. Якщо ви почнете виділяти з вищої до нижньої позиції курсору (від нижнього номера стовпця до більш високого номера стовпця рядка), ви збережете початкове положення курсора при натисканні y
  2. Курсор залишиться до поточного положення, якщо виділення починається від нижнього до більш високого положення курсору.

Повернення до вихідного місця після потріскування:
gv щоб отримати попереднє виділення.

Тепер ви можете перемикатися між оригінальним та поточним розташуванням у візуальному режимі за допомогою клавіші
oабо O.

Рядок та номер стовпця рядка статусу допоможуть дізнатися точне положення курсору.
Документація:

:help visual-change

Це не працює, vipколи курсор запускається в середині абзацу.
Антоній

О, я цього не помічав, бо зараз редагую свою відповідь, а не видаляю.
vusan

@Antony Тепер він також працює для vipперевірки моєї редагування.
vusan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.