Làm cách nào để tự động tạo dấu ngoặc phù hợp trong vim?
Vấn đề này là không tầm thường, như bạn sẽ thấy. Câu trả lời đơn giản là: Sử dụng một plugin, như Tự động đóng hoặc smartinput . Chỉ cần ánh xạ lại một cách ngây thơ ([.. các phím sẽ hiển thị cho bạn các edgecase trong một vài dòng, đó là lý do tại sao các plugin này được tạo ra và tại sao chúng thường khá phức tạp (nếu chúng tốt).
Vì vậy, tôi đã sử dụng UltiSnips để chèn nẹp đóng
Bạn có thể thử điều này thay vào đó (khác với đề xuất ban đầu của tôi):
inoremap ( ()<CR>=UltiSnips_Anon('$1)$0', ')')<CR>
Trường hợp UltiSnips sẽ phân chia dòng trên (
thay vì bao gồm main
trong trận đấu. Vấn đề với việc sử dụng plugin đoạn trích cho việc này là chúng (thường) không hỗ trợ lồng nhau, vì vậy chúng sẽ quên bất kỳ vị trí nhảy nào khi đoạn mã tiếp theo (lồng nhau) được chèn.
Để nhảy ra khỏi cặp nẹp, sự kết hợp Ctrl-jđược sử dụng.
Bạn có Ctrl-jthể ánh xạ lại cho UltiSnips hoặc plugin xung đột. Nếu ánh xạ không được liệt kê trong tài liệu, bạn có thể sử dụng :map/imap/nmap <key>
để hiển thị ánh xạ. Nếu bạn muốn Ctrl-jchọn và chọn và thực hiện công việc của cả hai plugin, bạn đang yêu cầu:
- một cái gì đó cao cấp hơn nhiều so với tôi nghĩ bạn có thể nghĩ
- một cái gì đó tôi nghi ngờ bạn không thực sự muốn
Hãy xem xét vòng lặp bash này:
while (( ${arr1[i]} < ${arr2[i<CURSOR>]} )); do
[next_snippet_position_marker]
done
Trong trường hợp này, bạn sẽ cần nhấn Ctrl-j5 lần để đến thân vòng lặp. Sử dụng dấu ngoặc nhọn để nhảy ra khỏi một cặp tương ứng giúp bạn kiểm soát nhiều hơn nơi bạn thực sự muốn con trỏ di chuyển. Bạn có thể triển khai một ngăn xếp để theo dõi các cặp được chèn và sử dụng Ctrl-jđể bật và di chuyển, nhưng sau đó bạn sẽ gặp vấn đề nếu bạn bắt đầu xóa dấu ngoặc bằng tay mà không xóa chúng khỏi ngăn xếp. Vì vậy, bạn sẽ bắt đầu giải quyết các vấn đề mà các phần bổ trợ đang cố gắng giải quyết. Đây là một bánh xe cứng để phát minh lại.
Mở rộng về điều này, bạn có thể nhận được những gì ban đầu bạn yêu cầu, sử dụng Ctrl-jđể nhảy ra khỏi niềng răng và đoạn trích. Nếu bạn sử dụng một số giá trị giả để thể hiện các vị trí đoạn trích và đẩy chúng lên ngăn xếp ngoài dấu ngoặc nhọn, với ánh xạ lại động Ctrl-jđể tương ứng với việc đưa đoạn mã hoặc dấu ngoặc nhọn. Nhưng sau đó, bạn sẽ cần triển khai một số phương pháp phỏng đoán khá tiên tiến để tìm ra điều kỳ diệu nào sẽ xảy ra, vì về cơ bản bạn đang gặp phải hai vấn đề, hiện đang được giải quyết bởi những người tạo ra các plugin chèn đoạn trích và các phần bổ trợ khớp nối riêng biệt, và giải quyết lại các vấn đề này một lần nữa, trên các giải pháp của họ , để đạt được sự thuận tiện và, tốt, ma thuật.
Nó đi xuống để kiểm soát vs thuận tiện. Tôi nghĩ rằng kiểm soát sẽ phục vụ bạn tốt hơn trong trường hợp này, có nghĩa là bạn nên giữ những vấn đề này và các plugin và keymappings liên quan của chúng riêng biệt. Nếu bạn vẫn muốn sự thuận tiện, điều đó là có thể, nhưng thật khó.
)
, ánh xạ lạic-j
để có thể làm việc.