2013-04-21 35 views
35

Tôi muốn chèn dòng mới trong chế độ bình thường trong vim bằng cách sử dụng Shift-EnterCtrl-Enter. Tôi thử một số giải pháp và giải pháp trộn từ Vim Wikia - Insert newline without entering insert mode nhưng Shift-EnterCtrl-Enter không trả lời:Chèn một dòng mới mà không cần nhập vào chế độ chèn, vim

" put a new line before or after to this line 
nnoremap <S-CR> m`o<Esc>`` 
nnoremap <C-CR> m`O<Esc>`` 

" reverse J command 
nnoremap <C-J> vaW<Esc>Bi<CR><Esc>k:s/\s\+$//<CR>$ 
+0

'$ TERM' (nếu * nix) của bạn là gì? – timss

+0

'echo $ TERM' ->' xterm' Tại sao? – helq

+0

Nó có thể có liên quan như thế nào các phím được giải thích. Bạn có sử dụng màn hình hoặc tmux không? Điều đó đang được nói, tôi đã thử một vài lựa chọn thay thế và nó chỉ hoạt động với 'bản đồ o ' tại đây. – timss

Trả lời

7

Do cách mà các đầu vào bàn phím được xử lý nội bộ, điều này không phải là không may nói chung có thể ngày hôm nay. (Trường hợp đặc biệt này nên làm việc trong GVIM, mặc dù.) Một số tổ hợp phím, giống như Ctrl + không thuộc chữ cái không thể được ánh xạ, và Ctrl + thư vs Ctrl + phím Shift + thư Không thể phân biệt được. (Trừ khi thiết bị đầu cuối của bạn gửi một mã số riêng biệt termcap cho nó, mà hầu hết không.) Ở chế độ chèn hoặc dòng lệnh, hãy thử nhập tổ hợp phím. Nếu không có gì xảy ra/được chèn vào, bạn không thể sử dụng tổ hợp phím đó. Điều này cũng áp dụng cho <Tab>/<C-I>, <CR>/<C-M>/<Esc>/<C-[> vv (Chỉ có ngoại lệ là <BS>/<C-H>.) Đây là một điểm đau nổi tiếng, và là chủ đề của cuộc thảo luận khác nhau trên vim_dev và kênh #vim IRC.

Một số người (trước hết là Paul LeoNerd Evans) muốn sửa lỗi đó (ngay cả đối với giao diện điều khiển Vim trong các thiết bị đầu cuối hỗ trợ điều này), và đã thả nổi various proposals.

Nhưng tính đến hôm nay, không có bản vá hoặc tình nguyện viên nào được đưa ra, mặc dù nhiều người đã bày tỏ mong muốn có điều này trong bản phát hành chính Vim 8 trong tương lai.

+0

có vẻ khó xử và kỳ lạ, cảm ơn vì lời giải thích – helq

+0

Đó là chủ yếu do lý do lịch sử, nhưng tiếc là khá khó thay đổi. –

39

thay thế của tôi đang sử dụng oo để chèn một dòng mới dưới dòng điện qua bản đồ này (resp OO.) (Resp kết thúc.): nmap oo o<Esc>k (. Resp nmap OO O<Esc>j)

+0

Câu trả lời hay. Chỉ cần 'o' hoạt động và đi vào chế độ chèn quá. Cảm ơn – jpincheira

+0

Điều khiến tôi bận tâm nhất với các câu trả lời khác là lối tắt. Điều này ủng hộ sở thích của tôi. – Canella

+0

Tôi đã ** nmap o k ** vì Shift + J xóa dòng mới. – Mo2

1

tôi sử dụng: s/\ n/\ r \ r/g (đặt dòng mới với hai dòng mới, giống như "o").

+0

cần thiết cho một cabbrev xích – zzapper

1

Đây là những gì tôi sử dụng:

nmap <CR> :a<CR><CR>.<CR> 

tôi đã cố gắng nmap <CR> o<Esc>, nhưng nó làm cho giao diện người dùng glitchy như nó đã được chuyển sang chế độ chèn và ngược lại.

-2

Bạn có thể sử dụng hack để thực hiện việc này.

Trong chế độ chỉnh sửa, bạn có thể sử dụng p để dán khay nhớ tạm thời hiện tại. Vì o thêm một dòng mới, bạn có thể sử dụng o<ESC>ddp để thêm một dòng mới bên dưới con trỏ; từ đó, p sẽ thêm một dòng mới cho đến khi bạn xóa một mục khác.

Các vấn đề liên quan