Làm cách nào để di chuyển con trỏ đến trung tâm của dòng hiện tại?


16

Có cách nào để tôi có thể di chuyển con trỏ đến giữa dòng hiện tại không? (giữa dòng văn bản - không phải giữa chiều rộng màn hình)

Tôi đã tự hỏi nếu có một phím tắt tương tự như Mdi chuyển con trỏ đến giữa màn hình.

EDIT : Đã thêm làm rõ bên trong dấu ngoặc đơn


2
Vì vậy, là giữa giữa của dòng đầy đủ hoặc giữa chiều rộng màn hình?
muru

@muru Đã nghĩ đến giữa dòng đầy đủ
thameera 11/03/2015

2
Bạn có thể thêm nó vào câu hỏi không? Và những gì bạn mong đợi sẽ xảy ra với gói?
muru

Câu trả lời:


16

Tôi không biết bất kỳ cách dựng sẵn nào để làm điều này, tuy nhiên, bạn có thể dễ dàng có một bản đồ để làm điều đó:

nnoremap µ :exe 'normal! '.(virtcol('$')/2).'\|'<cr>

@Ingo Karkat đề xuất biến thể sau cũng hoạt động ở chế độ VISUAL.

noremap <expr> gM (virtcol('$') / 2) . '<Bar>'

Thật không may, nó cũng được kích hoạt ở chế độ CHỌN. Kết quả là, tôi thích cặp đôi này:

nnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'
xnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'

3
Biến thể này cũng sẽ hoạt động chính xác cho chế độ trực quan:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Ingo Karkat

15

Việc tích hợp gmthực hiện chính xác điều này.


6
Lưu ý rằng điều này sẽ đưa bạn đến giữa dòng đối với chiều rộng của giao diện điều khiển , không liên quan đến chiều dài của dòng . Vì vậy, nếu bạn có một dòng gồm 10 ký tự và bảng điều khiển rộng 80 ký tự, con trỏ sẽ kết thúc ở ký tự thứ 10 trong dòng (vì đó là "cố gắng" để đến số 40), chứ không phải thứ 5.
apnorton

3
Vâng. Từ câu hỏi, không rõ liệu chúng ta đang tìm kiếm ở giữa dòng hay giữa màn hình. Dựa trên sự tương tự M, tôi giả sử màn hình.
tommcdo 10/03/2015

1
Trên thực tế tôi chỉ thử điều này trên một màn hình rộng (khoảng 180 ký tự) với văn bản 80 ký tự. Con trỏ đi đến cuối dòng. Có vẻ như không phải là một lệnh rất hữu ích.
Ben

@Ben Nó đã đi đến cuối của dòng, hoặc nó đã đi gần đến trung tâm của chiều rộng màn hình như nó có thể nhận được? Hãy thử nó với một dòng rộng hơn 50% so với màn hình hoặc thử với nó :set virtualedit=all.
8bittree

Có nhưng OP đã yêu cầu một lệnh nhảy đến giữa dòng văn bản, không phải giữa màn hình. Vì vậy, nó không trả lời câu hỏi.
Ben

3

Để thêm vào câu trả lời của Luc, cũng có plugin Easymotion , giúp di chuyển nhanh đến một vị trí cụ thể một cách dễ dàng. Nhấn <Leader><Leader>wsẽ làm nổi bật phím nào bạn có thể nhấn để di chuyển đến một từ cụ thể. Bằng cách đó bạn có thể dễ dàng di chuyển đến một từ ở giữa dòng hiện tại.


1

Nếu bạn muốn đi đến giữa văn bản (không tính đến khoảng trắng ở đầu dòng), điều này sẽ hoạt động:

function! s:Gm()
  execute 'normal! ^'
  let first_col = virtcol('.')
  execute 'normal! g_'
  let last_col  = virtcol('.')
  execute 'normal! ' . (first_col + last_col) / 2 . '|'
endfunction
nnoremap <silent> gm :call <SID>Gm()<CR>

Tôi không nghĩ rằng điều này sẽ làm việc trong chế độ trực quan, tuy nhiên.

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.