Cách chèn một dòng mới mà không cần rời khỏi chế độ bình thường


23

Tôi tự hỏi nếu tôi có thể chèn một dòng mới mà không cần rời khỏi chế độ bình thường. Ví dụ: tôi có hai dòng:

this is line one
this is line two

Và con trỏ ở trên dòng một. Bây giờ tôi muốn một dòng mới giữa dòng một và dòng hai, như thế này:

this is line one

this is line two

Tôi biết rằng khi tôi ở chế độ bình thường, tôi chỉ cần nhấn o. Nhưng điều này sẽ vào chế độ chèn.

Làm cách nào tôi có thể chèn một dòng mới như thế và ở trong chế độ bình thường?


Câu trả lời:


10

Tôi sử dụng một ánh xạ cho điều đó:

" Quickly insert an empty new line without entering insert mode
    nnoremap <Leader>o o<Esc>
    nnoremap <Leader>O O<Esc>

Bằng cách này, bạn có thể chèn một dòng dưới con trỏ của bạn <Leader>ovà một dòng trên dòng trước đó với <Leader>O.

Lưu ý: Người ta có thể lập luận rằng nó yêu cầu nhiều tổ hợp phím như o<Esc>vậy nhưng hy vọng bạn đã chọn nhà lãnh đạo của mình để làm cho loại bản đồ này trở nên dễ dàng. Ngoài ra tôi thực sự không chắc chắn có một cách tích hợp để làm điều này.


8

Một giải pháp không qua chế độ chèn, không di chuyển con trỏ và cho phép bạn sử dụng bộ đếm để nối thêm nhiều dòng cùng một lúc ( 3\ov.v.):

nnoremap <silent> <leader>o :<C-u>call append(line("."),   repeat([""], v:count1))<CR>
nnoremap <silent> <leader>O :<C-u>call append(line(".")-1, repeat([""], v:count1))<CR>

5

Cá nhân tôi khuyên bạn nên sử dụng plugin Unimpaired của Tim Pope . Nó cung cấp nhiều ánh xạ nhưng những thứ bạn sẽ tìm kiếm [<space>]<space>tạo ra các dòng trống tương ứng bên trên và bên dưới dòng hiện tại. Unimpaired cũng cung cấp các ánh xạ đẹp để di chuyển qua danh sách quickfix, danh sách bộ đệm, tùy chọn bật tắt và nhiều thứ khác. Xem :h unimpairedđể biết thêm.

Nếu bạn không muốn sử dụng plugin không có kinh nghiệm nhưng giống như các ánh xạ bên dưới là một số ánh xạ nhanh để đưa vào ~/.vimrctệp của bạn :

nnoremap <silent> [<space>  :<c-u>put!=repeat([''],v:count)<bar>']+1<cr>
nnoremap <silent> ]<space>  :<c-u>put =repeat([''],v:count)<bar>'[-1<cr>

5

Nếu bạn không muốn thêm ánh xạ, bạn có thể kéo yymột dòng trống và sau đó dán pcho con trỏ bên dưới và Pbên trên con trỏ.


Đây có lẽ là câu trả lời tốt nhất mà không cần ánh xạ.
Willem van Ketwich

Hoặc lưu nó vào osổ đăng ký "oyyvà dán nó từ đó bất cứ khi nào cần "op.
mike23

4

Bản đồ của tôi sử dụng Shift-Enter. Nó khác với những cái khác ở chỗ con trỏ được trả về cùng một dòng và cột bằng cách sử dụng dấu o.

" Insert new line above without going into insert mode
" (uses mark o to return to the previous cursor column)
nnoremap <S-Enter> moO<Esc>`o

5
Lưu ý rằng ánh xạ <S-Enter>không hoạt động trong trình giả lập thiết bị đầu cuối (nó chỉ hoạt động trong gVim). Vì vậy, bạn sẽ cần chọn một tổ hợp phím khác nhau để ánh xạ tới ;-)
Martin Tournoij

2

Câu trả lời này của Maxim Kim đã thay đổi cuộc sống:

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>

và riff của tôi về nó:

noremap <silent> <s-space> :exe "normal a".nr2char(getchar())<CR>

Đặt những dòng trong của bạn vimrc. Sau đó đi đến đầu dòng thứ hai của tập tin và hit của bạn Space, Enterhoặc đi đến tận cùng của dòng đầu tiên và hit Shift+Space, Enter. Hoặc sẽ thêm dòng trống giữa dòng thứ nhất và thứ hai và để bạn ở chế độ bình thường.

Bạn cũng có thể sử dụng những phím này cho bất kỳ phím đơn nào khác - nhấn Spacehoặc Shift+Spacetheo sau bởi phím bạn muốn và nó sẽ chèn hoặc nối nó tương ứng.


2

Những ánh xạ này sẽ làm chính xác những gì bạn đang tìm kiếm.

nnoremap <c-n> @="m`o\eg``"<cr>
nnoremap <c-p> @="m`O\eg``"<cr>   

Chúng chèn n số dòng mới trước hoặc sau con trỏ; giữ con trỏ chính xác vị trí của nó, mà không thay đổi danh sách nhảy.

Một giải pháp khác là chỉ cần tạo một lối tắt điền vào thanh ghi không tên bằng một dòng mới. Sau đó, bạn có thể chỉ cần sử dụng các lệnh put, p hoặc P để chèn dòng mới. Ví dụ:

nnoremap "<cr> :let @@="\n"<cr>

1

Bản đồ của tôi cho điều này

 " Create Blank Newlines and stay in Normal mode
nnoremap <silent> zj o<Esc>k
nnoremap <silent> zk O<Esc>j

Khác với statox vì điều này giữ con trỏ ở cùng một vị trí.


<silent>nghĩa là gì
Alex

Nó ngăn tiếng vang bất cứ điều gì đến dòng trạng thái. Tôi khá chắc chắn rằng nó không làm gì trong trường hợp cụ thể này, nó chỉ ở đó bất cứ nơi nào tôi đã sao chép nó từ lâu, từ lâu. Xem :h map-silent.
Kevin

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.