Bạn có thể có các ràng buộc khóa cụ thể cho loại tệp trong Vim không?


79

Trong .vimrctệp của tôi , tôi có một liên kết khóa để nhận xét chèn dấu gạch chéo kép ( //) ở đầu dòng:

" the mappings below are for commenting blocks of text
:map <C-G> :s/^/\/\//<Esc><Esc>
:map <C-T> :s/\/\/// <Esc><Esc>

Tuy nhiên, khi tôi đang chỉnh sửa tập lệnh Python, tôi muốn thay đổi điều đó thành # dấu hiệu cho nhận xét

Tôi có một Python.vimtệp trong .vim/ftdetectthư mục của mình cũng có cài đặt cho độ rộng tab, v.v. Mã để ghi đè các liên kết khóa nếu có thể là gì, để tôi có thể sử dụng Python:

" the mappings below are for commenting blocks of text
:map <C-G> :s/^/#/<Esc><Esc>
:map <C-T> :s/#/ <Esc><Esc>

Câu trả lời:


64

Thư mục ftdetect dành cho các tập lệnh phát hiện loại tệp. Các plugin của Filetype phải nằm trong thư mục ftplugin. Loại tệp phải được bao gồm trong tên tệp ở một trong ba dạng sau:

  • .../ftplugin/<filetype>.vim
  • .../ftplugin/<filetype>_foo.vim
  • .../ftplugin/<filetype>/foo.vim

Ví dụ: bạn có thể ánh xạ các nhận xét cho loại tệp cpp đặt những điều sau vào bên trong .../ftplugin/cpp_mine.vim:

:map <buffer> <C-G> :s/^/\/\//<Esc><Esc>
:map <buffer> <C-T> :s/\/\/// <Esc><Esc>

6
Bạn đã quên <buffer>một phần.
Luc Hermitte

1
Câu trả lời của bạn giải quyết hai vấn đề của tôi, ánh xạ trên mỗi loại tệp và cách nhận xét dòng hiện tại bằng ánh xạ. Tuyệt quá!
rendon

84

Bạn có thể sử dụng :map <buffer> ...để tạo ánh xạ cục bộ chỉ cho bộ đệm hoạt động. Điều này yêu cầu Vim của bạn được biên dịch với +localmap.

Vì vậy, bạn có thể làm điều gì đó như

autocmd FileType python map <buffer> <C-G> ...

9

Tôi thích có cấu hình của mình trong một tệp duy nhất nên tôi sử dụng phương pháp autocmd.

augroup pscbindings
  autocmd! pscbindings
  autocmd Filetype purescript nmap <buffer> <silent> K :Ptype<CR>
  autocmd Filetype purescript nmap <buffer> <silent> <leader>pr :Prebuild!<CR>
augroup end

Vim không xóa autocmds đã thiết lập khi bạn lấy nguồn của bạn vimrc, vì vậy việc bắt đầu vim, thay đổi thứ gì đó trong của bạn vimrcvà chạy :so ~/.vimrcsẽ xác định autocmds hai lần. Đó là lý do tại sao các ràng buộc được nhóm lại và xóa bằng autocmd! group_name. Bạn có thể đọc thêm ở đây .

Vì các ánh xạ được áp dụng cho mọi bộ đệm theo mặc định và bạn muốn thay đổi chúng cho các bộ đệm chỉ phù hợp với loại tệp, công cụ <buffer>sửa đổi nằm trong đó, giới hạn các ánh xạ đối với bộ đệm cục bộ.


4

Btw ... nếu vấn đề chính của bạn là về nhận xét ... bạn nên xem plugin 'nerdcommenter', đây là cách nhanh nhất để nhận xét / bỏ ghi chú mã của bạn trong java / c / c ++ / python / dos_batch_file / etc, v.v.


1
Tôi đã rất rất hài lòng với YAATPP * github.com/tpope/vim-commentary * -> Yet Another tuyệt vời Tim Đức Giáo Hoàng Plugin
patrickdavey

0

Tôi đề xuất .../ftplugin/<filetype>.vimcách tiếp cận mà freitass gợi ý, nhưng trong trường hợp cụ thể của bạn, Vim Com comment sẽ giải quyết tất cả điều này cho bạn.


-1

Đây chỉ là câu trả lời một phần cho những người đến đây gặp khó khăn trong việc tải bất kỳ tập lệnh ftplugin nào hoạt động, nhưng hãy nhớ rằng .vimrc của bạn (hoặc một tệp mà nó có nguồn) phải chứa

filetype plugin on

hoặc là

:filetype plugin on

để filetype-plugin được thực thi khi một tệp thuộc một loại nhất định được tải.


Chỉ cần nhận thấy một số phản đối. Rất vui khi được chỉnh sửa hoặc xóa cho phù hợp, nhưng tôi cần phải biết lý do đầu tiên: /
koyae
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.