Làm thế nào để thực hiện gói thẻ trong mã VS?


169

Tôi muốn bọc html đã chọn của mình trong một thẻ bằng mã VS. Làm thế nào để làm điều đó?


1
Một trong những lý do tôi không thể hoàn toàn chuyển sang VSCode và bỏ Sublime.
budji

3
@budji Đây là một tính năng tích hợp sẵn với emmet ... Gần như mọi thứ bạn muốn cũng là một tiện ích mở rộng và nếu không phải lúc nào bạn cũng có thể làm cho riêng mình.
James Coyle

Tôi thích câu hỏi này và tôi biết và cuộc gọi mở rộng (Emmet Wrap with Viết tắt), nhưng bất cứ ai cũng sẽ biết cách thực hiện các hành động nghịch đảo. Ví dụ: viết <p> ... </ p> trước và bao gồm bên trong <u> ** </ u> với kết quả này <p> ... <u> ** </ u> ... </ p>
Jmainol

Câu trả lời:


341

Emmet nhúng có thể thực hiện các mẹo:

  1. Chọn văn bản (tùy chọn)
  2. Mở bảng lệnh (thường là Ctrl+ Shift+ P)
  3. Hành hình Emmet: Wrap with Abbreviation
  4. Nhập một thẻ div(hoặc viết tắt .wrapper>p)
  5. Đánh Enter

Lệnh có thể được gán cho một keybinding.

nhập mô tả hình ảnh ở đây


Điều này thậm chí còn hỗ trợ truyền các đối số:

{
    "key": "ctrl+shift+9",
    "command": "editor.emmet.action.wrapWithAbbreviation",
    "when": "editorHasSelection",
    "args": {
        "abbreviation": "span"
    }
},

Sử dụng nó như thế này:

  • span.myCssClass
  • span#myCssId
  • b
  • b.myCssClass


4
Đây phải là câu trả lời, emmet đã được cài đặt trong vscode
Nathan

15
Ctrl+ plà goToFile. Bảng lệnh là Ctrl+ Shift+ P.
Alex

1
Đối với JSX, phải thêm bước bổ sung này: github.com/Microsoft/vscode/issues/4962#issuecomment-323880988
Gezim

1
Với VSCode 1.35.0 (và có thể sớm hơn), việc này sẽ hoạt động với JSX - không cần thêm cấu hình nào
davnicwil

98

Tìm kiếm nhanh trên thị trường VSCode: https://marketplace.visualstudio.com/items/bradgashler.htmltagwrap .

  1. Khởi chạy nhanh Mã VS ( Ctrl+ P)

  2. dán ext install htmltagwrapvà nhập

  3. chọn HTML

  4. nhấn Alt+ W( Option+ Wcho máy Mac).


Bạn có thể có nghĩa là chọn Cài đặt ở bước 3.
Samir

1
"Để sử dụng, chọn một đoạn mã và nhấn" Alt + W "(" Tùy chọn + W "cho Mac)." Đủ đơn giản! Ngoại trừ nó không hoạt động. Tôi đã thử phiên bản 0.0.3 với Mã VS 1.16.1. Nó gần như hoạt động. Nó cố gắng bọc lựa chọn trong <p></p>các thẻ, thay vì chung chung <div></div>có vẻ là điều lành mạnh hơn để làm. Điều tồi tệ hơn là nó thất bại. Nó tạo ra kết quả như<p><p>My selected text.</p>
Samir

1
Tôi đã thử các phần mở rộng khác như thế. Nhưng cho đến nay tôi không có bất kỳ may mắn tìm thấy một hoạt động. Điều này là gần nhất với một giải pháp làm việc. Tôi đã thử gói 0.0.1 của David Taylor và Ctrl + tôi hoàn toàn không hoạt động.
Samir

1
CẬP NHẬT: tiện ích mở rộng hiện hoạt động chính xác và giải quyết các vấn đề trên. Không còn thẻ trùng lặp và bây giờ bạn có thể tùy chỉnh thẻ bạn muốn chèn thông qua một cài đặt. Vì vậy, nếu bạn muốn thẻ là một <div>bạn thêm cài đặt sau đây "htmltagwrap.tag": "div".
bgashler1

đó là cách triển khai khá kém - hoạt động với một thẻ duy nhất, thật tuyệt khi có một cái gì đó tương tự như plugin notepad ++ html nơi bạn có thể gói lựa chọn bằng thẻ từ lựa chọn thẻ có thể định cấu hình của mình
Sasha Bond

37

Khi tôi không thể bình luận, tôi sẽ mở rộng câu trả lời tuyệt vời của Alex.

Nếu bạn muốn trải nghiệm giống như Sublime với việc mở gói Tiện ích mở rộng Keymap (Tùy chọn> Tiện ích mở rộng Keymap [ Cmd+ K Cmd+M ]) và thêm đối tượng sau:

{
    "key": "alt+w",
    "command": "editor.emmet.action.wrapIndividualLinesWithAbbreviation",
    "when": "editorHasSelection && editorTextFocus"
}

Cái nào sẽ liên kết lệnh quấn Emmet với Alt + Wkhi văn bản được chọn

(Xin lỗi vì chỉ dẫn OSX)


7
Đây là cách tôi đã thêm lối tắt: Tùy chọn> Phím tắt Keyamp; ... sau đó tìm kiếm gói emmet; ... nhấp + để thêm lối tắt của bạn; ... :)
Luckylooke

1
ngoài ra, tôi đã thêm && resourceLangId == 'html' chỉ hoạt động cho các trang web
surpavan

@surpavan, hay nhưng cũng có thể có ích trong các loại tệp khác, ví dụ: tệp mẫu html
Andrew Lewis

1
@AndrewLewis - vâng, đó là lý do tại sao tôi giữ nó thành id ngôn ngữ chứ không phải phần mở rộng tập tin (files.associations).
surpavan

Shift + Alt + W miễn phí cho các cửa sổ.
Timofeus

23
  1. Mở Phím tắt bằng cách gõ ⌘ Command+ k ⌘ Command+ shoặcCode > Preferences > Keyboard Shortcuts
  2. Kiểu emmet wrap
  3. Nhấp vào dấu cộng ở bên trái của "Emmet: Wrap with Viết tắt"
  4. Loại ⌥ Option+w
  5. nhấn Enter

3

Tôi có một câu trả lời tốt hơn cho việc này bằng Snippets

Tạo một đoạn mã với định nghĩa như thế này:

"name_of_your_snippet": {
    "scope": "javascript,html",
    "prefix": "name_of_your_snippet",
    "body": "<${0:b}>$TM_SELECTED_TEXT</${0:b}>"
}

Sau đó liên kết nó với một khóa trong keybindings.json Ví dụ như thế này:

{ 
    "key": "alt+w",
    "command": "editor.action.insertSnippet",
    "args": { "name": "name_of_your_snippet" }
}

Tôi nghĩ rằng điều này sẽ cung cấp cho bạn kết quả chính xác như htmltagwrap nhưng không phải cài đặt tiện ích mở rộng.

Nó sẽ chèn các thẻ xung quanh văn bản đã chọn, mặc định để <b>gắn thẻ và chọn thẻ để nhập cho phép bạn thay đổi nó.

Nếu bạn muốn sử dụng một thẻ mặc định khác, chỉ cần thay đổi bthuộc bodytính của đoạn mã.


Điều này là tốt nhưng Emmet có thể làm điều này và nhiều hơn nữa, chẳng hạn như tạo HTML, các thuộc tính và danh sách lồng nhau. Emmet ra khỏi hộp với mã VS.
Andrew Lewis

Tôi không hiểu các downvote. Tất nhiên, Emmet phức tạp hơn và tôi có thể làm rất nhiều thứ nhưng để gói một lựa chọn văn bản bằng một thẻ, giải pháp này thật tuyệt! Khi bạn quấn, bạn không phải di chuyển mắt đến phần trên của màn hình / cửa sổ. Nó xảy ra ngay tại đó, nơi bạn đã ở vì bạn đã chọn văn bản! Đây là một trường hợp sử dụng khá phổ biến và giải pháp nhanh chóng với thời gian chạy thấp!
Andrei V

Tôi đã rất phấn khích với điều này tuy nhiên tôi không thể làm cho nó hoạt động: /
Icaro
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.