Sau khi sao chép lựa chọn trực quan vào bàn phím, trở về vị trí ban đầu


18

Con trỏ của tôi ở giữa một đoạn khi tôi quyết định đột ngột tôi cần sao chép đoạn đó:

khởi đầu

Vì vậy, tôi gõ vipđể chọn đoạn văn một cách trực quan:

đã chọn

Bây giờ tôi nhấn cmd+Cđể sao chép vào clipboard (điều này có thể khác nhau trên hệ thống của bạn, nhưng không liên quan đến câu hỏi trung tâm của bài đăng của tôi), khiến con trỏ của tôi ở đầu đoạn:

sau cùng

thay vì vị trí mong muốn, đó là nơi tôi đã bắt đầu.

Lưu ý vấn đề tương tự xảy ra khi kéo theo lựa chọn không trực quan với yip.

Tôi muốn hành vi mặc định là "trở về vị trí con trỏ ban đầu" sau khi thực hiện các hành động lựa chọn / sao chép như thế này. Có một cấu hình làm cho điều này có thể?


11
Vâng, tôi thấy điều này quá phiền phức. Tôi chỉ có xu hướng sử dụng nhãn hiệu cho mục đích đó: mm "+yap `m(Lưu ý rằng "+yyanks vào bảng tạm hệ thống của bạn)
fruglemonkey

3
Tôi thấy thật hữu ích khi đặt con trỏ ở đầu hoặc ở cuối vùng được kéo dài. Rốt cuộc, bây giờ tôi có thể làm gì, với văn bản được kéo và con trỏ bên trong nó? Bây giờ không có ý nghĩa gì khi thực hiện đặt / dán. Nhưng, nếu tôi muốn làm điều đó sau, điều đó có nghĩa là tôi cũng có thể kéo dài sau đó ... có lẽ những gì bạn cần bây giờ chỉ là một dấu ấn.
VanLaser

Câu trả lời:


14

Một giải pháp có thể là sử dụng nhảy:

Trước khi kéo hoặc chọn trực quan, bạn có thể đặt bước nhảy mới mà bạn có thể truy cập sau khi con trỏ di chuyển. Để làm như vậy sử dụng m`.

Sau đó, sau khi con trỏ của bạn đã di chuyển vì sử dụng kéo dài ctrlođể nhảy trở lại trong danh sách nhảy. Ngoài ra, bạn có thể xem danh sách các bước nhảy có sẵn :jumpsvà điều hướng danh sách này với ctrloctrli

Để tổng hợp quy trình công việc của bạn sẽ là:

  • m`
  • yip
  • ctrlo

Khi sử dụng m` đặt một dấu, bạn có thể chuyển đến nó bằng ``thay vì ctrlo.

Bạn có thể đọc :h mark-motions:h :jumpsđể biết thêm thông tin.


Tôi thích điều này. Có cách nào để làm cho trích dẫn duy nhất hoạt động như backtick nói chung, khi nhảy? trích dẫn đơn dễ nhập hơn và thông thường tôi muốn nhảy đến đúng vị trí cột cũng như đúng dòng ...
Jonah

1
@Jonah, tôi lập bản đồ <leader>'được `, mà hoạt động khá tốt đối với tôi. (Tôi sử dụng <space>với tư cách là thủ lĩnh của mình.)
Numeri nói Phục hồi Monica

@Jonah: Như Numeri đã nói, một bản đồ có thể là một giải pháp tốt, nếu không, nếu bạn muốn thoát khỏi backtick, bạn có thể xem qua :h 'langmap'. Tôi không nói đó là giải pháp lý tưởng nhưng có lẽ nó có thể thú vị với bạn.
statox

@Johah, tôi thực sự trao đổi một trích dẫn và đánh dấu lại bằng cách sử dụng noremap ' ` noremap ` '... Đây là trong vimrc của tôi và hoạt động rất tốt
Niko Bellic

10

Bạn có thể tránh di chuyển con trỏ bằng:

:'{,'}y

Xem :help range, :help mark-motions:help :y.


1
Rất vui được biết, nhưng đó là những gì bạn thực sự làm? Có vẻ như gõ 8 phím, với hai dấu ngoặc, làm cho việc này khó hơn các giải pháp đánh dấu
Jonah

Đó là những gì tôi sẽ làm nếu tôi ở vị trí của bạn. Nhưng tôi không có vấn đề gì với hành vi bạn mô tả nên tôi không thực sự làm điều đó.
romainl

2
@Jonah Bạn vẫn có tùy chọn để tạo bản đồ. Một cái gì đó như :nmap <key> :'{,'}y<CR>nên làm công việc.
statox

10

Con trỏ của tôi ở giữa một đoạn

Nếu bạn vừa chỉnh sửa nó, giải pháp đơn giản nhất là nhập g ;con trỏ vào vị trí chỉnh sửa cuối cùng.

Và nếu bạn chưa chỉnh sửa đoạn văn, bạn có thể thực hiện thao tác thay thế đơn giản bằng chính ký tự bạn đang bật (ví dụ: bạn bật h, bạn nhập rh) để kích hoạt "sự kiện" chỉnh sửa mà không thực sự chỉnh sửa bất cứ điều gì.


2
+1: Tôi luôn sử dụng '., nhưng nó có thể rất hữu ích để điều hướng giữa các thay đổi cuối cùng với g;g,.
mMontu

2
Có phiên bản g;nào đưa bạn đến đúng vị trí cột không?
Giô-na

@Jonah đó là hành vi theo mặc định. Nó không làm việc cho bạn? Nó luôn luôn đưa tôi đến đúng vị trí cột và dòng.
Al.G.

4

Các Plugin vim-easyclip có một thiết lập cho việc này:

g:EasyClipPreserveCursorPositionAfterYank- Mặc định 0 (tức là bị vô hiệu hóa). Hành vi mặc định của Vim là định vị con trỏ ở đầu văn bản được kéo dài, phù hợp với các chuyển động khác. Tuy nhiên, nếu bạn thích vị trí con trỏ không thay đổi khi thực hiện yanks, hãy bật tùy chọn này.

Tôi hơi khó khăn khi cài đặt toàn bộ plugin chỉ cho tính năng nhỏ này, vì vậy tôi thích sử dụng nhãn hiệu theo nhận xét của mình.


0

Mở rộng câu trả lời của Al.G., chúng tôi có thể đi đến vị trí cần thiết mà không cần chỉnh sửa. Giải pháp là gi. Chúng tôi sẽ đạt đến vị trí tương tự như chúng tôi đã ở chế độ chèn cuối cùng trước đó.

  • Bạn đang ở giữa đoạn văn.
  • chuyển sang chế độ chèn.
  • chuyển sang chế độ bình thường.
  • nhấn vip.
  • nhấn gi.
  • chuyển sang chế độ bình thường. ( gisẽ để chúng tôi chèn chế độ)

Nếu chúng ta muốn đi để bắt đầu hoặc kết thúc văn bản được tô sáng.

 :help v_o 

Khi bạn kéo văn bản được tô sáng, bạn cũng sẽ trở về chế độ bình thường và bạn có thể hoặc không thể giữ vị trí con trỏ ban đầu.

  1. Nếu bạn bắt đầu tô sáng từ vị trí con trỏ cao hơn đến thấp hơn (từ số cột dòng thấp hơn đến số cột dòng cao hơn), bạn sẽ giữ vị trí con trỏ ban đầu khi nhấn y
  2. Con trỏ sẽ vẫn ở vị trí hiện tại nếu đánh dấu bắt đầu từ vị trí con trỏ thấp hơn đến cao hơn.

Quay trở lại vị trí ban đầu sau khi kéo dài:
gv để có được điểm nhấn trước đó.

Bây giờ bạn có thể chuyển đổi giữa vị trí ban đầu và hiện tại trong chế độ trực quan bằng phím
ohoặc O.

Dòng và số cột của dòng trạng thái sẽ giúp biết chính xác vị trí con trỏ.
Tài liệu:

:help visual-change

Điều này không hoạt động vipkhi con trỏ bắt đầu ở giữa đoạn.
Antony

Oh ya tôi đã không nhận thấy nó, bây giờ tôi sẽ chỉnh sửa câu trả lời của tôi thay vì xóa nó.
vusan

@Antony Bây giờ nó cũng hoạt động để vipkiểm tra chỉnh sửa của tôi.
vusan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.