Tôi có mong muốn tương tự như của bạn. Tôi đã giải quyết nó bằng cách sử dụng liên kết lại khóa sửa đổi cấp hệ thống.
(Tất nhiên, đây là một mớ hỗn độn; nhưng tôi thấy nó đáng để duy trì sự điều khiển lai MacVim do tôi điều khiển (lưu, mới, sao chép, dán) trong dòng lệnh vim
.)
Đây là cách tôi đã làm:
- Cài đặt Karabiner , đây là một chương trình rất , rất mạnh mẽ (và là một phần thiết yếu của bất kỳ cài đặt OS X nào của nhà lập trình / nhà lập trình, IMHO)
Kích hoạt tính năng “Command_L để Control_L (chỉ trong Terminal)” :
Các ⌃điều khiển được ánh xạ kết hợp phù hợp với bất kỳ lệnh MacVim nào bạn sử dụng nhiều nhất trong dòng lệnh vim
. Ví dụ, để hỗ trợ ⌘S,
noremap <silent> <C-S> :update<CR>
vnoremap <silent> <C-S> <C-C>:update<CR>
inoremap <silent> <C-S> <C-O>:update<CR>
Khôi phục hậu quả mong đợi ⌘cho chính Terminal.app, bằng cách đặt chúng đặc biệt vào Tùy chọn hệ thống. Ví dụ: nếu bạn muốn ⌘Nvẫn kiểm soát các tab Terminal, thay vì ánh xạ nó vào vim
tệp, hãy thử:
Bây giờ, bất cứ điều gì bạn không thêm vào danh sách này, sẽ được chuyển qua nguyên văn cho dòng lệnh vim
(và tất nhiên, bất kỳ chương trình dòng lệnh nào khác mà bạn sử dụng.)
Hãy cẩn thận
Cách tiếp cận này có một số nhược điểm tinh tế hơn nữa , mà tôi muốn làm mờ mắt cho bất cứ ai xem xét việc sử dụng nó (như tôi làm):
- ⌘␣sẽ không còn ánh xạ tới Spotlight trên toàn hệ thống. (Tôi có một vấn đề mở về Karabiner và sẽ quay lại đây sau khi tôi có giải pháp ngăn chặn.)
- Vì những lý do tôi không thể xác định được, ngay cả với các ⌃Wloại trừ được thiết lập trong Tùy chọn hệ thống, hành vi đóng tab của Terminal.app thay đổi với thiết lập này: ⌘Wsẽ đóng các tab riêng lẻ trong một cửa sổ; nhưng nếu tab hiện tại là tab cuối cùng , nó sẽ không đóng cửa sổ. Thay vào đó, nó không có tác dụng. Tôi đã phải tự đào tạo lại để sử dụng ⇧⌘Wđể đóng cửa sổ nếu chỉ còn một tab.
- Nếu bạn đã tự đào tạo để sử dụng ⌃Vtrong MacVim để thực hiện lựa chọn theo khối, thì bạn sẽ phải tự đào tạo lại để sử dụng giải pháp thay thế , ⌃Q(hoặc, ngay bây giờ, ⌘Q). Ngoài ra, bạn sẽ phải thêm
stty -ixon
vào tập lệnh khởi động của shell của mình, như ⌃Qđược sử dụng theo mặc định để tạo thành một chức năng kiểm soát shell cổ xưa (một chức năng không sử dụng hiện đại.)
⌘WHành vi thay thế
Ngoài những điều trên, tôi quyết định ghi đè thêm ⌘Wdưới dạng khóa 'đóng cái này' phổ quát, áp dụng cho nhiều ứng dụng.
Thay vì ánh xạ ⌘Wtới 'Đóng Tab,' như trên; Cá nhân tôi ánh xạ tới ⇧⌘W(để giữ lại ngay lập tức đóng tab ngữ nghĩa này.) Sau đó, trong bất kỳ chương trình cụ thể nào, tôi ánh xạ ⌃Wtới một số chức năng gần như tiết kiệm.
Chẳng hạn, trong .vimrc
:
noremap <C-W> :confirm quit<CR>
vnoremap <C-W> <C-C>:confirm quit<CR>
inoremap <C-W> <C-O>:confirm quit<CR>
Cẩu hay của tôi .zshrc
:
function close_tab { exit }
zle -N close_tab_widget close_tab
bindkey '' close_tab_widget
bindkey -M vicmd '' close_tab_widget
Với hai đoạn mã đó, và Terminal của bạn được định cấu hình thành 'Đóng nếu shell thoát ra một cách sạch sẽ', một loạt ⌘Ws trước tiên sẽ thoát vim và sau đó đóng hoàn toàn vỏ.
Ngoài ra, giờ đây, chức năng xuất cảnh bổ sung của các chương trình có thể được giữ nguyên: ví dụ, vim
sẽ hỏi trước khi thoát nếu các tệp không được lưu (giống như MacVim); và zsh
sẽ hỏi trước khi bỏ việc nếu có công việc nền.
Postcript: Không liên quan trực tiếp đến câu hỏi của bạn; nhưng bạn cũng nên kiểm tra 'Chế độ Vim Ubiquitous' trong Karabiner. Đó là một chút nhiều cho tôi sử dụng hàng ngày, nhưng đó là một ý tưởng rất hay và được thực hiện tốt.
private.xml
để loại trừ: github.com/tekezo/Files/blob/master/Karabiner/ợi