マイナス文字を含むCSSクラス名をオートコンプリートする方法は?


8

私は次のCSSクラス構造を持っています

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

等々。

HTMLファイル内で、これらのクラス名をオートコンプリートしたい。

しかし、タイプすると

<span class="mAIcon mA|">

残りをオートコンプリートしたいのですが、

<span class="mAIcon mAIcon|">

私が本当に欲しいものを取得するには、追加を入力する必要が-ありeます。たとえば、オートコンプリートをもう一度使用します。しかし、私はで始まるすべてのものを取得しe、クラスも取得しますevent。これは本当に煩わしく、この場合オートコンプリートはかなり役に立たなくなります。

i_CTRL-NコマンドでVimの一般的なキーワード補完を使用し、追加の補完プラグインをインストールしていません。

-オートコンプリートのCSSクラス名の検出にを含めることは可能ですか?


「オートコンプリート」と言いますが、これはYouCompleteMe、neocompleteなどを使用しているという意味ですか?もしそうなら、これはあなたの質問で言及されるべきです。そうでない場合は、<c-x><c-n>質問などで指定する必要がある、のような何らかの完了コマンドを発行する必要があります。
Karl YngveLervåg15年

@KarlYngveLervågコメントありがとうございます。私の編集を見てください。
Raphael Ahrens、2015

1
あなたの編集は私の疑いを確認しました。まず、IMHOのオートコンプリートは自動である必要があります。そのため、ここで説明する問題はオートコンプリートではなく、単にコンプリートで発生します。Vimでのオートコンプリートについては、neocompleteまたはYouCompleteMeを参照することをお勧めします。次に、Vimの一般的なキーワード補完を使用しています。キーワードはオプション'iskeyword'で定義されます。キーワードは他のコマンド(副作用)にも使用されますが、これは他の種類の(自動)補完機能を使用せずに目的を達成するための正しい方法です。
Karl YngveLervåg15年

@KarlYngveLervågまず誤解してごめんなさい。しかし、オートコンプリートは正しい用語だと思いました。次に、完了の問題を解決する方法を教えていただけますか?私が見ることができる限り、YouCompleteMeとneocompleteは標準の補完の補完動作を変更せず、「自動」を追加するだけです。これは不要です。これはVimで可能になると本当に思っていました。
Raphael Ahrens、2015

1
私は間違っているかもしれませんが、この場合タグ補完が機能するかもしれません。私は個人的にWeb開発をあまり行っていないため、Vim for html / css / ...にはあまり詳しくありませんがctags、プロジェクトのタグを生成できるはずです。次に、でタグの補完を行うことができますi_CTRL-X_CTRL-]。ただし、ドキュメントではタグ補完でもiskeywordオプションが使用されているため、間違っている可能性があります。いずれにせよ、あなたはおそらく読みたいでしょう:h ins-completion
Karl YngveLervåg15年

回答:


10

はい、次の'iskeyword'オプションを使用して、キーワードの一部と見なされる文字を定義できます。

setlocal iskeyword+=-

次のスニペットをに追加して、vimrcそのオプションをCSSおよびHTMLファイルに制限できます。

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

5
変更iskeywordには多くの副作用があることに注意してください。たとえば、dwon ではなくがsome-text削除されるようになりました。必ずしも悪いことではありませんが、注意する必要があります。some-textsome
Martin Tournoij、2015

Mhhこれは、CSSファイル内でのみ機能するようです。別のバッファー(HTMLファイルなど)に切り替えるとすぐに、マイナス記号なしの単語のみが完成します。
Raphael Ahrens、2015

@RaphaelAhrens、私の編集を見てください。
romainl 2015

@romainl私はあなたの速い答えに本当に感謝しています。しかし、申し訳ありませんが、この回答は受け入れられません。これは、より多くのファイルタイプでスケーリングされず、さらに、Carpetsmokerによって言及された副作用があるためです。御理解いただけることを願います。
ラファエルアーレンス

1
私はこれを使用しますが、トリガーjscoffeeファイルも実行します。私はCSSのクラスをJavaScriptで完成させることが多く、スペースなしで減算を実行するコードを持っていることはめったにありません。私が編集するコードでdiff = foo - bar;は、より一般的ですdiff=foo-bar;
joeytwiddle

1

タグファイルを作成する小さなpythonスクリプトを記述して問題を解決しました。スクリプトはCSSクラスを検索し、すべてのクラスのタグ行を出力します。

現時点では、スクリプトを手動で実行しています

css_tags $file >> tags

タグファイルにファイルを追加します。タグ補完はiskeyword設定によって制限されないため、これは機能します。

これは、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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.