2012-09-27 30 views
6

sau đây là mảnh kịch bản vim từ một plugin vim:cách hiểu tập lệnh vim này?

tôi nên nói cú pháp của vim đó là một chút lạ:

  1. !exists("*s:SetVals"), tại sao họ là một Starmark trước s:?
  2. chức năng !, tại sao có một! tính cách?
  3. & từ khóa, đây có phải là biến, nếu có, nơi biến được xác định?
  4. s:g:, sự khác biệt giữa chúng là gì?
  5. tại sao nên sử dụng? chẳng hạn như let &dictionary = g:pydiction_location, tôi có thể đổi thành &dictionary = g:pydiction_location không?

nếu tồn tại! ("* S: SetVals")

function! s:SetVals() 
     " Save and change any config values we need. 

     " Temporarily change isk to treat periods and opening 
     " parenthesis as part of a keyword -- so we can complete 
     " python modules and functions: 
     let s:pydiction_save_isk = &iskeyword 
     setlocal iskeyword +=.,(

     " Save any current dictionaries the user has set: 
     let s:pydiction_save_dictions = &dictionary 
     " Temporarily use only pydiction's dictionary: 
     let &dictionary = g:pydiction_location 

     " Save the ins-completion options the user has set: 
     let s:pydiction_save_cot = &completeopt 
     " Have the completion menu show up for one or more matches: 
     let &completeopt = "menu,menuone" 

     " Set the popup menu height: 
     let s:pydiction_save_pumheight = &pumheight 
     if !exists('g:pydiction_menu_height') 
      let g:pydiction_menu_height = 15 
     endif 
     let &pumheight = g:pydiction_menu_height 

     return '' 
    endfunction  

endif

+0

tại sao thẻ 'python'? –

+0

@AshwiniChaudhary vì python được gọi bởi tập lệnh này :) – hugemeow

+2

Nó có thể là Ruby hoặc Perl hoặc Lua và nó không liên quan gì đến câu hỏi của bạn. – romainl

Trả lời

2

Xem :help eval.txt. Nó mô tả hầu hết cú pháp vimscript.

+0

làm thế nào để bạn biết rằng tập tin này có hầu hết các đặc điểm kỹ thuật cho kịch bản vim, là có bất kỳ công cụ buildin mà tôi có thể tìm kiếm trên tất cả các tài liệu buildin vim của? – hugemeow

+2

@hugemeow Xem ': h: helpgrep',': helpgrep' là lệnh để tìm kiếm thông qua tất cả các tệp tài liệu. – ZyX

5

Tôi có thể trả lời một vài trong số đó nhưng tôi sẽ bắt đầu với nhận xét chung được lấy cảm hứng từ các câu hỏi gần đây của bạn.

Câu trả lời cho hầu hết các câu hỏi của bạn được trình bày rất rõ ràng trong tài liệu toàn diện đầy đủ của Vim. Nếu bạn nghiêm túc về việc sử dụng Vim, bạn phải biết cách sử dụng nó. Bắt đầu với :help và đọc kỹ. Nó trả tiền. Tin tôi đi.

Bạn có thể tìm câu trả lời cho tất cả các yêu cầu con này trong :help expression.

  • !exists("*s:SetVals"), tại sao chúng là starmark trước s:?

    Xem :help exists().

  • function!, tại sao có một ký tự !?

    Không có dấu chấm than, Vim sẽ không thay thế định nghĩa trước đó nếu bạn mã nguồn lại tập lệnh của mình.

  • &iskeyword, đây có phải là biến, nếu có, nơi nó được xác định?

    Đó là cách bạn kiểm tra giá trị của tùy chọn vim trong tập lệnh. Xem :help iskeyword.

  • s:g:, sự khác nhau giữa chúng là gì?

    Đây là các không gian tên. Xem :help internal-variables

  • tại sao phải sử dụng let? chẳng hạn như let &dictionary = g:pydiction_location, tôi có thể đổi số này thành &dictionary = g:pydiction_location không?

    Không, bạn không thể, :let là cách bạn xác định hoặc cập nhật biến. Làm quen với nó.

19

1.!exists("*s:SetVals"), tại sao họ là một Starmark trước s :?

Dấu hoa thị là cú pháp đặc biệt cho hàm tồn tại và có nghĩa là chúng tôi đang kiểm tra xem có hàm có tên là SetVals hay không. Các tùy chọn iskeyword có thể được kiểm tra với exists("&iskeyword") và lệnh echo cũ với exists(":echo")

Xem :h exists(

2.function!, tại sao có một! tính cách?

Dấu chấm than có nghĩa là chức năng sẽ được thay thế nếu nó đã tồn tại.

Xem :h user-functions

3.&iskeyword, đây là một biến, nếu có, nơi nó được định nghĩa?

Đó là tùy chọn vim. Bạn có thể kiểm tra nếu nó thiết lập với :set iskeyword?

4. là những gì s:g:, sự khác biệt giữa chúng là gì?

Xác định phạm vi của biểu tượng sau. s: có nghĩa là biểu tượng là cục bộ cho tập lệnh, trong khi g: có nghĩa là biểu tượng sẽ là toàn cầu.

Xem :h internal-variables và cho s: thấy :h script-variable

5. tại sao let nên được sử dụng? chẳng hạn như let &dictionary = g:pydiction_location, can i change it to be &dictionary = g:pydiction_location?

Vimscript là một trong những ngôn ngữ yêu cầu các biến được khai báo với từ khóa. Tôi không nghĩ rằng có một cách để khai báo các biến dễ dàng hơn với let.

+1

4 .: "xác định phạm vi" là đúng "biểu tượng chỉ có thể được sử dụng trong tập lệnh hiện tại" là sai: có 's:' - từ điển phạm vi - và bạn được tự do chuyển nó ở nơi khác để cấp quyền truy cập biến tập lệnh cục bộ. – ZyX

+1

5 .: không có yêu cầu cho các biến được khai báo với một từ khóa (ví dụ: 'mở rộng cuộc gọi (g :, {'var': 'val'})' tạo biến g: var, không sử dụng 'let'), chỉ có một loại câu lệnh: một lệnh giống như '[phạm vi] [lệnh] [!] [đối số [s]] [chú thích]' (tất cả các phần tử là tùy chọn, một số lệnh yêu cầu thiếu phạm vi, bang , đối số hoặc không hỗ trợ nhận xét đưa họ như là một phần của đối số, phạm vi không có lệnh là “đi tới dòng cuối cùng trong phạm vi”), không có câu lệnh “gán” OP yêu cầu vì nó không tuân thủ cú pháp này. – ZyX

+0

Cảm ơn ZyX. Tôi đã sửa đổi câu trả lời để sửa lỗi. –

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