Sử dụng vim khi nhấn cả mở và đóng ngoặc / ngoặc / etc


8

Khi tôi học lập trình, tôi sẽ nhấn cả dấu ngoặc mở và đóng / v.v sau đó nhấn phím mũi tên trái rồi nhập văn bản. Vì vậy, để đặt vào [hello]tôi sẽ gõ [], và sau đó mũi tên bên trái để nó nằm trên dấu ngoặc đầu tiên ( [).

Tôi thích điều đó bởi vì tôi biết tôi luôn có số dấu ngoặc / etc phù hợp và nếu không tôi cảm thấy như bàn tay của mình phải di chuyển qua lại với phím ngoặc / etc

Nhưng, gắn bó với tư duy Vim, tôi không muốn tiếp tục với tới các phím mũi tên. Có bất cứ điều gì tôi có thể làm mà không liên quan đến việc sử dụng các phím mũi tên hoặc phải liên tục chuyển khỏi chế độ chèn để chỉ nhấn hvà quay lại?

Câu trả lời:


5

Bạn có thể đang tìm kiếm plugin cặp tự động :

Khi bạn nhập một ký tự như thế {, (hoặc [plugin này sẽ tự động thêm ký tự đối xứng và thay thế con trỏ của bạn ở chế độ chèn giữa hai dấu ngoặc. Nó cũng có thể "thông minh" trong khi xóa các ký tự đó.

Ngoài ra nếu tôi có thể cho bạn một lời khuyên hãy quên các phím mũi tên . Bất cứ điều gì bạn muốn làm, luôn có một chuyển động nhanh hơn có thể truy cập mà không cần di chuyển bàn tay của bạn từ hàng nhà. Có thể mất một chút thời gian để làm quen với nó, nhưng một khi đó là thói quen bạn thậm chí sẽ không bỏ lỡ chúng.


Cảm ơn vì nhận xét và, nếu bạn không phiền tôi hỏi; bạn có gõ "[" rồi "xin chào" rồi "]". Nếu không có các plugin bao quanh (có vẻ như là một ý tưởng tuyệt vời, cảm ơn), có vẻ như rất khó để quay trở lại ngay cả khi không có vấn đề về khả năng mất đúng số lượng dấu ngoặc
JZL003

Vâng thực sự tôi luôn luôn sử dụng một trong hai tính năng tự động cặp hoặc surround.vim (xem câu trả lời của Peter) nhưng nếu tôi phải làm điều đó mà không cần plug-in, tôi sẽ làm [, ] , <Esc>(mà sẽ đặt con trỏ trên ] ) và cuối cùng imà sẽ đặt con trỏ giữa các dấu ngoặc trong chế độ chèn.
statox

@statox khi ở chế độ chèn, làm thế nào để bạn di chuyển con trỏ hai vị trí sang trái? Với ctrl-o 2h? Đây có phải là nhanh hơn so với việc di chuyển bàn tay của bạn đến các con trỏ? ;)
Vitor

@Vitor Không, tôi sẽ nhấn phím Esc để chuyển sang chế độ bình thường, đối với một chuyển động có ít hơn 3 ký tự, tôi có thể sẽ nhấn vài lần hhoặc jnếu không tôi sẽ sử dụng các chuyển động khác. Nó cảm thấy nhanh hơn với tôi, nhưng tôi hiểu rằng một số người cảm nhận nó theo một cách khác :)
statox

@statox sau 10 năm sử dụng vim, tôi vẫn đang cố gắng sử dụng hjkl và đặc biệt trong kịch bản này tôi vừa mô tả. Cảm ơn ý kiến ​​của bạn! :)
Vitor

8

Có rất nhiều plugin "cặp" tự động làm điều này cho bạn. Tuy nhiên tất cả đều chà tôi sai cách. Tôi có xu hướng sử dụng plugin Surround.vim của Tim Pope . Tôi làm như sau: <c-s>]trong chế độ chèn để chèn []bằng con trỏ ở giữa dấu ngoặc.


Nhiều người cần biết về điều này, vim Surround hữu ích hơn là chỉ gói gọn mọi thứ. Ngoài ra, tôi cảm thấy plugin plugin bất ổn, rất hung hăng và cuối cùng lãng phí tổ hợp phím để định dạng
rgalbo

4

Nếu bạn chỉ cần di chuyển một khoảng trắng, ctrl-otrong chế độ chèn sẽ làm cho đầu vào tiếp theo của bạn trở thành một lệnh bình thường, do đó ctrl-o, hsẽ di chuyển trở lại một khoảng trắng. Modeline sẽ hiển thị --- (insert) ---cho đến khi bạn nhập lệnh bình thường.


2

lh-ngoặc cung cấp ánh xạ chế độ chèn, bình thường và trực quan để chèn cặp dấu ngoặc.

Ghi chú:

  • Thêm cặp khung mới là khá dễ dàng.
  • Ánh xạ chế độ chèn có độ nhạy ngữ cảnh - nghĩa là không được mở rộng trong bối cảnh chuỗi hoặc nhận xét, ...
  • Không giống như plugin bao quanh, các ánh xạ xung quanh là trực quan, nhưng không theo kiểu vim. tức là nhấn (trong chế độ trực quan sẽ bao quanh (theo mặc định), chúng ta không phải nhấn si(hoặc các chuỗi tương tự.

2

Câu trả lời trước rất tốt. Nhưng tôi nghĩ rằng bạn có thể muốn một cái gì đó dễ dàng hơn. Cá nhân tôi sử dụng h j k lđể di chuyển xung quanh. Do đó, tôi đã thêm vào .vimrc của mình như sau:

inoremap <c-j> <esc>ji
inoremap <c-k> <esc>ki
inoremap <c-h> <esc>i
inoremap <c-l> <esc>2li

Chỉ là một mẹo nhỏ. Bạn nói rằng thủ tục của bạn là i, [], <Esc>hi.

Có điều hành-Pending Mappings, Có nghĩa là bạn có thể ci[hay di[hay ii[.


1

Cá nhân tôi không phải là một fan hâm mộ lớn của việc chèn các ký tự tự động; bạn có thể dễ dàng xác định một bộ ánh xạ để chèn văn bản và thêm con trỏ đến nơi bạn muốn:

" Add brackets with closing bracket
inoremap <C-a>[ []<Left>
inoremap <C-a>( ()<Left>

" For C & C-like languages
inoremap <C-a>{ {<Cr><Cr>}<Up>

" For Ruby
inoremap <C-a>def def<Cr>end<Up>

Lưu ý rằng một plugin như ultisnips cũng làm những thứ như thế này, nhưng cao cấp hơn. Ví dụ trong Javascript tôi có thể gõ:

if<Tab>hello

va tôi lây:

if (hello) {

}

Bạn có thể thêm một đoạn đơn giản để hoàn thành dấu ngoặc; đây là tệp .snippet đặc biệt sống trong ~/.vim/UltiSnips/all.snippets:

snippet (
(${0})
endsnippet

snippet [
[${0}]
endsnippet

snippet {
{
${0}
}
endsnippet

${0} là vị trí con trỏ.

xem :help UltiSnips-adding-snippetsđể biết thêm thông tin

Lưu ý rằng ultisnips yêu cầu Python; một plugin nổi tiếng khác là vim-snipmate . Wiki Vim có một danh sách đầy đủ các plugin đoạn trích .

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.