tạo đoạn trích riêng

Aug 30 2020

Tôi khá mới mẻ với vim. Và tôi không thích cài nhiều gói.

Tôi sử dụng html, javascript và react.js và tôi muốn tạo một số cách đơn giản để nhập và sau đó có đoạn mã chính xác trên tệp.

Nó sẽ chỉ có 5 hoặc 6 đoạn mã, bạn có thể giúp tôi một tay để bắt đầu học nghệ thuật này từ đâu?


Biên tập

Có 2 ý tưởng trong đầu tôi (theo nghĩa đen).

  1. Một phím tắt hiển thị một đoạn văn bản (giả sử có thể). Có thể đoạn văn bản này được bao gồm trong .vimrc hoặc một nơi nào đó?
  2. Các đề xuất mà tôi đã kiểm tra bao gồm việc gõ một cái gì đó và mở rộng nó bằng cách sử dụng một trong hai tab hoặc một số cách nhấn phím cụ thể.

Một ví dụ cụ thể là tiêu đề html và một ví dụ khác là một thành phần phản ứng, như thế này:

class className extends React.Component{
  constructor(){
    super()
    this.state = {}
  }
  render(){
    return
  }
} 

Đoạn mã html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content=" " />
<meta name="description" content=" " />
<title>Title Here</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
</body>
</html>

Đối với điều cuối cùng này, có emmet-vim, nhưng tôi muốn làm theo cách của mình, ít nhất là đối với các đoạn trích dài.

Trả lời

3 JakeGrossman Aug 29 2020 at 23:41

TL; DR : Kiểm tra:help abbreviations.

Thí dụ:

Giả sử tôi muốn tạo một đoạn mã để nhanh chóng tạo một đối tượng JavaScript ở định dạng sau với từ viết tắt "obj" ( |đại diện cho vị trí con trỏ sau khi thực hiện viết tắt):

var foo = {|};

Tôi có thể làm:

iabbrev obj var foo = {};<Left><Left>

Sau đó, bất cứ khi nào tôi nhập objvào chế độ chèn theo sau là một ký tự không phải từ khóa (thường là <Space>hoặc <Esc>/ <c-]>), nó sẽ được mở rộng (lưu ý rằng nếu <Space>được nhấn, nó sẽ chèn một khoảng trắng trước con trỏ. Một phương pháp để tránh hành vi này được nêu trong trang trợ giúp cho abbreviations)

Nếu vì lý do nào đó bạn không muốn mở rộng chữ viết tắt của mình, Bạn có thể nhấn <c-v>trước khi nhập ký tự không phải từ khóa.

Xem:

:h abbreviations
:h :iabbrev
:h 'iskeyword'

Chỉnh sửa cho bản chỉnh sửa của bạn:

Đối với một trong những ví dụ cụ thể của bạn (Thành phần React), bạn có thể làm:

iabbrev rc class className extends React.Component{<CR>
            \constructor(){<CR>
              \super()<CR>
              \this.state = {}<CR>
            \}<CR>
            \render(){<CR>
              \return<CR>
            \}<CR>
          \}

Tôi đã từng \định dạng nó đẹp hơn, nhưng tôi đoán bạn có thể đặt tất cả vào một dòng:

iabbrev rc class className extends React.Component{<CR>constructor(){<CR>super()<CR>this.state = {}<CR>}<CR>render(){<CR>return<CR>}<CR>}

nhưng chúc may mắn khi làm việc với điều đó. Đáng chú ý là \bỏ qua khoảng trắng phía trước, vì vậy việc thụt lề không làm được gì ngoài việc giúp tổ chức chữ viết tắt.

Điều này sẽ hoạt động đối với bất kỳ chữ viết tắt tĩnh nào bạn muốn thực hiện, bao gồm cả ví dụ HTML của bạn, nhưng đó là cách bạn tìm hiểu :).

2 LucHermitte Aug 30 2020 at 10:53

Bạn có thể sử dụng các từ viết tắt như chúng ta đã từng làm cách đây 2 thập kỷ, nhưng tôi không khuyên bạn nên sử dụng nó cho các đoạn mã nhiều dòng như những đoạn bạn đã hiển thị.

Tất nhiên là có thể sử dụng các từ viết tắt. Như chúng ta có thể làm với các chữ viết tắt, hầu hết mọi thứ chúng ta có thể làm với các plugin đoạn trích - về các chi tiết mà bạn sẽ muốn loại bỏ không gian thừa mà bạn sẽ chèn bằng :iablệnh mặc định và hoàn toàn có thể để vô hiệu hóa một số chữ viết tắt khỏi việc mở rộng bên trong nhận xét hoặc chuỗi.

Có vấn đề gì với các từ viết tắt nhiều dòng? Họ chỉ đơn giản là không thể hiểu được. Thêm chuyển động của con trỏ và chúng tôi sẽ nhanh chóng cần một số người trợ giúp để giảm bớt cơn đau. Ví dụ, hãy xem một từ viết tắt đơn giản mà tôi có cho C và C ++ .

Inoreabbr <buffer> <silent> if <C-R>=lh#cpp#snippets#def_abbr('if ',
      \ '\<c-f\>if(!cursorhere!){!mark!}!mark!')<cr>

Tất cả các máy móc thiết bị phụ ( :Inoreabbr, lh#cpp#..., !cursorhere!, !mark) là một số điều thêm tôi phải xác định để chăm sóc ăn gian thêm, di chuyển con trỏ định placeholders / nhảy-vị trí, trung hòa sự mở rộng trong ý kiến hoặc các chuỗi, áp dụng phong cách / tùy chọn định dạng (khoảng trắng và dòng mới có thể được chèn trước / sau dấu ngoặc ...).

Tương tự với một công cụ đoạn mã có thể trông giống như

if(<+cond+>){<+code+>}

Các công cụ đoạn mã khác nhau hiển thị các biến thể cú pháp khác nhau. Cú pháp trên là từ plugin mà tôi đang duy trì (và điều đó cũng có thể áp dụng định dạng nhanh). Chọn một plugin trong số các plugin khác nhau tồn tại . Về lâu dài, nó sẽ đơn giản hơn nhiều.

Đặt trước các từ viết tắt cho những thứ đơn giản hoặc bởi vì bạn thực sự, thực sự không muốn gì ngoài phím khoảng trắng để kích hoạt việc mở rộng các đoạn trích của bạn.

elmclose Aug 30 2020 at 21:44

Nếu bạn không muốn sử dụng các công cụ mở rộng văn bản, bạn có thể đặt mọi đoạn mã trong một tệp vim riêng biệt và chỉ cần đọc trong đoạn mã (tệp) bạn cần bằng :r snippet1(hoặc bất kỳ tên tệp nào bạn đã đặt cho đoạn mã dự định). Bạn phải ở chế độ bình thường để làm điều này.

Đảm bảo Vim biết thư mục nào chứa các đoạn trích của bạn.