Come completare automaticamente i nomi delle classi CSS che includono un carattere meno?


8

Sto avendo la seguente struttura di classe CSS

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

e così via.

All'interno dei miei file HTML voglio completare automaticamente questi nomi di classe.

Ma quando scrivo

<span class="mAIcon mA|">

e voglio completare automaticamente il resto l'unica cosa che ottengo è

<span class="mAIcon mAIcon|">

Per ottenere ciò che desidero davvero, devo digitare un extra -e, ad esempio, eutilizzare nuovamente il completamento automatico. Ma poi ottengo tutto ciò che inizia con una e, persino la classe event. Questo è davvero fastidioso e rende il completamento automatico piuttosto inutile in questo caso.

Uso il completamento della parola chiave generica di Vim con il i_CTRL-Ncomando e non ho plug-in di completamento aggiuntivi installati.

È possibile includere il -rilevamento dei nomi delle classi CSS per il completamento automatico?


Dici "completamento automatico", significa che stai usando YouCompleteMe, neocomplete o qualcosa di simile? In tal caso, questo dovrebbe essere menzionato nella tua domanda. In caso contrario, è necessario immettere un tipo di comando di completamento, ad esempio <c-x><c-n>, che deve essere specificato anche nella domanda.
Karl Yngve Lervåg,

@ KarlYngveLervåg grazie per il tuo commento. Dai un'occhiata alla mia modifica.
Raphael Ahrens,

1
La tua modifica ha confermato il mio sospetto. Innanzitutto, il completamento automatico di IMHO dovrebbe essere automatico e come tale il problema che stai descrivendo non è con il completamento automatico, ma semplicemente con il completamento. Per il completamento automatico in Vim ti consiglio di guardare neocomplete o YouCompleteMe. Secondo, stai usando il completamento generico KEYWORD di Vim. Una parola chiave è definita dall'opzione 'iskeyword'e anche se le parole chiave sono utilizzate anche per altri comandi (effetti collaterali), questo è ancora il modo corretto per ottenere ciò che desideri senza usare altri tipi di completamento (automatico).
Karl Yngve Lervåg,

@ KarlYngveLervåg In primo luogo mi dispiace per l'incomprensione. Ma ho pensato che il completamento automatico fosse il termine giusto. Secondo, potresti indicarmi qualcosa che risolve il mio problema di completamento? Per quanto posso vedere YouCompleteMe e neocomplete non cambiano il comportamento di completamento del completamento standard, aggiungono solo più "auto", che non mi serve. Pensavo davvero che sarebbe stato possibile con Vim.
Raphael Ahrens,

1
Potrei sbagliarmi, ma il completamento del tag potrebbe funzionare in questo caso. Personalmente non faccio molto sviluppo web, quindi non ho molta familiarità con Vim per html / css / ..., ma penso che ctagsdovrebbe essere in grado di generare tag per il tuo progetto. Quindi puoi completare il tag con i_CTRL-X_CTRL-]. Tuttavia, vedo nei documenti che il completamento del tag utilizza anche l' iskeywordopzione, quindi potrei sbagliarmi. In ogni caso, probabilmente vorrai leggere :h ins-completion.
Karl Yngve Lervåg,

Risposte:


10

Sì, puoi definire quali caratteri sono considerati parte delle parole chiave con l' 'iskeyword'opzione:

setlocal iskeyword+=-

Puoi aggiungere il seguente frammento al tuo vimrcper limitare questa opzione ai file CSS e HTML:

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

5
Si noti che la modifica iskeywordha molti effetti collaterali. Per esempio dwsul some-textsaranno ora cancellare some-text, anziché soltanto some. Non necessariamente una cosa negativa, ma qualcosa di cui essere consapevoli.
Martin Tournoij,

Mhh questo sembra funzionare solo all'interno di un file CSS, non appena passo a un buffer diverso (ad esempio un file HTML) completa solo le parole senza il segno meno.
Raphael Ahrens,

@RaphaelAhrens, vedi la mia modifica.
Romainl,

@romainl Apprezzo molto la tua risposta veloce. Ma mi dispiace, non posso accettare questa risposta poiché non si ridimensionerà con più tipi di file e inoltre ha gli effetti collaterali menzionati da Carpetsmoker. Spero che tu capisca.
Raphael Ahrens,

1
Lo uso ma mi innesco jse coffeeanche i file. Perché mi ritrovo a completare le classi CSS spesso in Javascript e raramente ho codice che esegue la sottrazione senza spazio. Nel codice che modifico, diff = foo - bar;è più comune didiff=foo-bar;
joeytwiddle il

1

Ho risolto il problema scrivendo un piccolo script Python che crea un file tag. Lo script cerca le classi CSS e stampa una tag line per ogni classe.

Al momento eseguo la sceneggiatura a mano con

css_tags $file >> tags

che aggiunge i file al file dei tag. Funziona poiché il completamento del tag non è limitato iskeyworddall'impostazione.

Ecco il contenuto dello script, disponibile anche su 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()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.