2008-11-14 31 views
11

Tôi là một người dùng vim khao khát và đã bắt đầu viết một số mã SQL gần đây. Tôi muốn viết các câu lệnh SQL của tôi trong CAPS và đôi khi quên chuyển đổi CapsLock 'tắt' và sau đó tôi nhanh chóng phá hủy mã của tôi trước khi tôi nhận ra điều gì đang xảy ra.Làm cách nào để thiết lập vim tự động thay đổi màu nền của tôi tùy thuộc vào việc CAPS LOCK có bật hay không?

Tôi chưa tìm thấy bất kỳ cách nào để biết liệu phím CapsLock có nằm ngoài bàn phím của tôi không (tôi yêu cầu tôi nhìn ra khỏi màn hình mà tôi cho là một sự chậm trễ lớn).

Lý tưởng nhất là tôi muốn vim để tự động thay đổi màu nền của tôi bất cứ khi nào CapsLock được 'bật' nhưng tôi muốn được sẵn sàng để giải quyết đối với một số chỉ số trên màn hình khác của CapsLock tình trạng như một sự thỏa hiệp.

Trả lời

1

Điều tốt nhất tôi có thể cung cấp cho bạn là có vim chuyển đổi màu nền bất cứ khi nào phím CAPSLOCK được nhấn vào vim.

Vim không thể phát hiện khóa CAPSLOCK một mình. Những gì tôi có thể cung cấp cho bạn là ánh xạ để bạn có thể sử dụng một số khóa khác (trong ví dụ này, F3) để hoạt động giống như phím CAPSLOCK cho chế độ chèn và thay đổi màu nền khi bật tất cả các nắp. Hy vọng rằng điều này sẽ cung cấp cho bạn các chức năng bạn cần.

Đặt sau trong ~/vimrc hoặc trong thích hợp ~/.vim/ftplugin/<filetype> .vim:

" let the case be toggled in normal mode 
    map <expr> <F3> ToggleInsertCase() 
    " let the case be toggled in insert mode 
    imap <expr> <F3> ToggleInsertCase() 

    let toUpper = 0 
    func! ToggleInsertCase() 
     let g:toUpper = 1 - g:toUpper 
     if (g:toUpper == 1) 
      highlight Normal ctermbg=Blue " the background color you want when uppercased 
      " convert all the letters to uppercase in insert mode 
      let i = char2nr('a') 
      while i <= char2nr('z') 
       let c = nr2char(i) 
       exe 'inoremap' c toupper(c) 
       let i = i + 1 
      endwhile 
     else 
      highlight Normal ctermbg=Black " the background color you want normally 
      " let letters be as normal in insert mode 
      let i = char2nr('a') 
      while i <= char2nr('z') 
       let c = nr2char(i) 
       exe 'iunmap' c 
       let i = i + 1 
      endwhile 
     endif 
     " don't insert anything when this function is called in normal mode 
     return "" 
    endfunc 

này vay mượn một số từ Tim Pope's capslock.vim.

Nếu bạn thực sự muốn sử dụng khóa CAPSLOCK cho điều này, tùy thuộc vào nền tảng của bạn, có một loạt ứng dụng miễn phí cho phép bạn remap khóa CAPSLOCK của bạn cho một thứ khác, vì vậy bạn có thể thiết lập để khi bạn nhấn CAPSLOCK, vim (và mọi thứ khác) có F3. Hay bất cứ cái gì. Điều này sẽ gây trở ngại cho các ứng dụng khác nhận được khóa CAPSLOCK mặc dù (trừ khi ứng dụng khóa-xin lỗi là thông minh), do đó điều đó có thể gây phiền toái.

+0

Cách tiếp cận này sẽ hoàn hảo vì tất cả những gì tôi cần để đảm bảo sau đó là tôi không có Caps Lock khi tôi nhập vim từ một cửa sổ khác. Bạn có thể ăn thịt thêm một chút nữa không? Tôi đã không viết vimscript trước và chơi xung quanh với các lệnh bạn đã không đưa ra khá những gì tôi mong đợi. Cảm ơn. – snth

3

Điều tôi đã làm là khóa khóa mũ của tôi thành khóa "Soạn thư", vì vậy phím capslock của tôi bị thiếu hiệu quả và tôi chỉ buộc bản thân mình sử dụng SHIFT thay thế. :)

Bạn có thể muốn dùng thử, âm thanh có vẻ mang tính masochistic nhưng tốt hơn về lâu dài. Một số người cho rằng Caps lock là dư thừa.

+0

Đó là một tùy chọn nhưng tôi không muốn đi xuống tuyến đường này. Tôi thấy rằng phím Caps Lock không hỗ trợ và muốn tiếp tục sử dụng nó. – snth

+0

Nếu bạn đang gõ rất nhiều thứ trong ALL CAPS, sau đó bỏ đi CAPS LOCK sẽ * thực sự * làm chậm tốc độ gõ của bạn. – iconoclast

+0

Tôi thấy những thứ liên kết trong ALL CAPS bị chậm lại dưới dạng tiền thưởng = p. Bên cạnh đó, tôi không bao giờ sử dụng pinky của tôi cho bất cứ điều gì khác hơn là thay đổi thực sự anyway. Nó có thể là "Bad" cho kiểu gõ, ... nhưng trên cộng, HOLDING SHIFT ĐÃ KHÔNG BAO GIỜ làm chậm tôi xuống. –

4

Cách gần nhất bạn có thể nhận được là câu trả lời của Kent. Vim không thể thấy CapsLock (hoặc NumLock hoặc ScrollLock hoặc bất kỳ khóa bổ trợ nào khác) do trạng thái của các khóa này không được gửi qua thiết bị đầu cuối.

Lưu ý rằng, về mặt lý thuyết, gVim có thể thấy các công cụ sửa đổi này, nhưng trong thực tế nó không có. Xử lý bàn phím của gVim vượt trội so với vim mặc dù theo nhiều cách khác.

0

Tại sao không có plugin filetype cho tệp .sql chứa lệnh imap để chuyển đổi tất cả các lần nhấn phím thành mũ. Bằng cách đó, bạn không bao giờ phải chuyển đổi phím capslock thực tế trên bàn phím và mọi thứ sẽ ổn khi bạn quay lại mã.

Thêm dòng sau trong file $ VIM/vimfiles/ftplugin/sql_too.vim:

imap a A 
imap b B 
imap c C 
imap d D 
imap e E 
imap f F 
imap g G 
imap h H 
imap i I 
imap j J 
imap k K 
imap l L 
imap m M 
imap n N 
imap o O 
imap p P 
imap q Q 
imap r R 
imap s S 
imap t T 
imap u U 
imap v V 
imap w W 
imap x X 
imap y Y 
imap z Z 
+0

Đó là một ý tưởng nhưng cũng có những dịp khác mà tôi muốn viết mũ, như trong các kịch bản shell sử dụng các biến môi trường. Ngoài ra, trong mã SQL tôi vẫn cần phải có thể viết tên bảng và tên cột trong CamelCase và trường hợp hỗn hợp và làm thế nào tôi sẽ làm điều đó ở đây? – snth

0

Tôi đồng ý với Kent, và remap phím Caps Lock để các phím điều khiển. Tôi đã sử dụng AutoHotKey để thực hiện việc này trên các hộp Windows, nhưng có cài đặt đăng ký như được mô tả here và nhiều địa điểm khác. Nếu bạn không sử dụng Windows, bạn cũng có thể dễ dàng remap phím caps lock trên MacOS và unix X nền tảng cửa sổ.

Sự tiện lợi của không phải vô tình có mũ khóa, vượt xa số lần vài năm mà tôi thực sự muốn!

5

Người đề xuất ánh xạ chữ cái thường lên chữ thường là đi đúng hướng nhưng chúng tôi cần thêm một số chi tiết khác. Bí quyết là ánh xạ các từ khóa SQL lên chữ hoa. Sau đó, bạn có thể nhập chúng vào chữ thường và vim sẽ chuyển đổi chúng thành chữ hoa cho bạn. Điều này được thực hiện bằng cách sử dụng các từ viết tắt chứ không phải ánh xạ. Ví dụ, nếu bạn tạo chữ viết tắt

:iab ATT American Telephone and Telegraph 

sau đó mỗi khi bạn gõ 'ATT' trong mã của bạn, Vim sẽ tự động dịch nó để 'American Telephone và Telegraph' ngay sau khi bạn nhấn thanh không gian. (Hãy thử nó! Thật thú vị!)

Vì vậy, hãy tạo một tệp mới và bắt đầu nhập các từ viết tắt cho tất cả các từ khóa SQL.

iab select SELECT 
iab like LIKE 
iab where WHERE 
... 

Vì bạn chỉ muốn những chữ viết tắt để áp dụng khi bạn đang chỉnh sửa mã nguồn SQL, lưu tập tin này vào ~/.vim/sau/ftplugin/sql.vim Các lệnh trong tập tin này sẽ được thực hiện khi Vim Phát hiện nó đã mở một tệp SQL.

Việc phát hiện loại tập tin chỉ hoạt động nếu bạn bật tính năng này do đó hãy chắc chắn rằng vimrc của bạn có dòng như:

set nocompat 
filet detect plugin on 

Một khi bạn có được điều này làm việc bạn nên tiết kiệm thời gian và có đường hầm cổ tay ít đảm nhiệm chức vụ xuống phím shift tất cả các thời gian!

+1

để tạo tệp từ viết tắt, tôi nhập tất cả các từ khóa sql (chữ thường), mỗi từ trên một dòng riêng và sử dụng lệnh ':% s,^\ w \ + $, iab & \ U &' – Tobias

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