Làm cách nào để tự động điền tên lớp CSS bao gồm một ký tự trừ?


8

Tôi đang có cấu trúc lớp CSS sau

.mAIcon
.mAIcon-reject
.mAIcon-edit
.mAIcon-accept
.event

và như thế.

Trong các tệp HTML của tôi, tôi muốn tự động hoàn thành các tên lớp này.

Nhưng khi tôi gõ

<span class="mAIcon mA|">

và tôi muốn tự động hoàn thành phần còn lại, điều duy nhất tôi nhận được là

<span class="mAIcon mAIcon|">

Để có được những gì tôi thực sự muốn, tôi phải gõ thêm -và ví dụ evà sử dụng lại tự động hoàn thành. Nhưng sau đó tôi nhận được mọi thứ bắt đầu bằng một e, thậm chí cả lớp event. Điều này thực sự gây phiền nhiễu và làm cho tự động hoàn thành khá vô dụng trong trường hợp này.

Tôi sử dụng hoàn thành từ khóa chung của Vim với i_CTRL-Nlệnh và tôi không có bất kỳ plugin hoàn thành bổ sung nào được cài đặt.

Có thể bao gồm -việc phát hiện các tên lớp CSS cho tự động hoàn thành không?


Bạn nói "tự động hoàn thành", điều này có nghĩa là bạn đang sử dụng YouCompleteMe, neocomplete hoặc một cái gì đó tương tự? Nếu vậy, điều này nên được đề cập trong câu hỏi của bạn. Nếu không, thì bạn phải ban hành một số loại lệnh hoàn thành, chẳng hạn như <c-x><c-n>, cũng cần được chỉ định trong câu hỏi của bạn.
Karl Yngve Lervåg

@ KarlYngveLervåg cảm ơn bạn đã bình luận. Hãy xem chỉnh sửa của tôi.
Raphael AhDR

1
Chỉnh sửa của bạn đã xác nhận sự nghi ngờ của tôi. Đầu tiên, tự động hoàn thành IMHO phải tự động và do đó, vấn đề bạn đang mô tả không phải là tự động hoàn thành, mà chỉ là hoàn thành. Để tự động hoàn thành trong Vim, tôi khuyên bạn nên xem neocomplete hoặc YouCompleteMe. Thứ hai, Bạn đang sử dụng hoàn thành KEYWORD chung của Vim. Từ khóa được xác định bởi tùy chọn 'iskeyword'và mặc dù từ khóa cũng được sử dụng cho các lệnh khác (tác dụng phụ), đây vẫn là cách chính xác để đạt được những gì bạn muốn mà không cần sử dụng các loại hoàn thành (tự động) khác.
Karl Yngve Lervåg

@ KarlYngveLervåg Trước tiên tôi xin lỗi vì sự hiểu lầm. Nhưng tôi nghĩ rằng tự động hoàn thành là thuật ngữ đúng. Thứ hai sau đó bạn có thể chỉ cho tôi một cái gì đó giải quyết vấn đề hoàn thành của tôi? Theo như tôi có thể thấy YouCompleteMe và neocomplete không thay đổi hành vi hoàn thành của việc hoàn thành tiêu chuẩn, họ chỉ thêm nhiều "tự động" mà tôi không cần. Tôi thực sự nghĩ rằng điều này sẽ có thể với Vim.
Raphael AhDR

1
Tôi có thể sai, nhưng hoàn thành thẻ có thể hoạt động trong trường hợp này. Cá nhân tôi không phát triển web nhiều và vì vậy tôi không quen với Vim cho html / css / ..., nhưng tôi nghĩ rằng ctagscó thể tạo thẻ cho dự án của bạn. Sau đó, bạn có thể làm thẻ hoàn thành với i_CTRL-X_CTRL-]. Tuy nhiên, tôi thấy trong các tài liệu hoàn thành thẻ cũng sử dụng iskeywordtùy chọn, vì vậy tôi có thể sai. Trong mọi trường hợp, bạn có thể muốn đọc :h ins-completion.
Karl Yngve Lervåg

Câu trả lời:


10

Có, bạn có thể xác định những ký tự nào được coi là một phần của từ khóa với 'iskeyword'tùy chọn:

setlocal iskeyword+=-

Bạn có thể thêm đoạn mã sau vào vimrcđể hạn chế tùy chọn đó đối với các tệp CSS và HTML:

augroup css
    autocmd!
    autocmd FileType css,html setlocal iskeyword+=-
augroup END

5
Lưu ý rằng sửa đổi iskeywordcó rất nhiều tác dụng phụ. Ví dụ dwtrên some-textsẽ xóa some-text, thay vì chỉ some. Không nhất thiết là một điều xấu, nhưng một cái gì đó để nhận thức được.
Martin Tournoij

Mhh điều này dường như chỉ hoạt động bên trong một tệp CSS, ngay khi tôi chuyển sang một bộ đệm khác (ví dụ: tệp HTML), nó chỉ hoàn thành các từ mà không có dấu trừ.
Raphael AhDR

@RaphaelAhrens, xem chỉnh sửa của tôi.
romainl

@romainl Tôi thực sự đánh giá cao câu trả lời nhanh của bạn. Nhưng tôi xin lỗi, tôi không thể chấp nhận câu trả lời này vì nó sẽ không mở rộng với nhiều loại tệp hơn và ngoài ra nó có tác dụng phụ được đề cập bởi Carpetsmoker. Tôi hy vọng bạn hiểu.
Raphael Ahrens

1
Tôi sử dụng nhưng tôi kích hoạt jscoffeetập tin quá. Bởi vì tôi thấy mình hoàn thành các lớp CSS thường xuyên trong Javascript và tôi hiếm khi có mã thực hiện phép trừ mà không có khoảng trắng. Trong mã tôi chỉnh sửa, diff = foo - bar;phổ biến hơndiff=foo-bar;
joeytwiddle

1

Tôi đã giải quyết vấn đề bằng cách viết một tập lệnh python nhỏ tạo tập tin thẻ. Kịch bản tìm kiếm các lớp CSS và in một dòng thẻ cho mỗi lớp.

Hiện tại tôi chạy kịch bản bằng tay

css_tags $file >> tags

trong đó thêm các tập tin vào tập tin thẻ. Điều này hoạt động kể từ khi hoàn thành thẻ không bị giới hạn bởi iskeywordcài đặt.

Đây là nội dung của tập lệnh cũng có sẵn trên GitHub .

#!/usr/bin/env python3

import argparse
import re

parser = argparse.ArgumentParser(description='CSStags.')
parser.add_argument('css_file', type=argparse.FileType('r'))


def create_tag(tag_name, filename, line):
    """
    Create a ctag line for the CSS class
    """
    print('%s\t%s\t/^%s$/;"\tc' % (tag_name, filename, line))


def main():
    args = parser.parse_args()

    class_regex = re.compile('^\.([\w-]+)\s*{')

    for line in args.css_file:
        class_match = class_regex.match(line)
        if class_match:
            create_tag(class_match.group(1), args.css_file.name, class_match.group(0))


if __name__ == '__main__':
    main()
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.