2010-08-12 6 views
1

Lors de l'écriture de non-code avec vim, j'ai souvent besoin de rechercher plusieurs mots qui pourraient être séparés par une nouvelle ligne au lieu d'un espace. Par exemple, je souhaite rechercher des occurrences de "maison blanche", mais certaines occurrences peuvent avoir une nouvelle ligne entre "blanc" et "maison". Je suis conscient qu'une telle recherche multiligne est possible avec "\ _s" (par exemple, "white \ _shouse") mais elle est lourde. Je voudrais remplacer la commande de recherche telle que les espaces sont traités comme "\ _s" sans que je doive les taper.Commande de recherche d'écrasement dans vim

Est-il possible de "remapper" la commande/search?

+0

muckabout: Qu'est-ce que cela vous _S faites référence? Cela semble utile ... J'ai historiquement utilisé [\ s \ n]. * edit * - juste essayé. Vouliez-vous dire \\ _ s? –

Répondre

1

Vous avez au moins deux options:

  1. Définir un mappage qui realloueront, par exemple, ,s à \_s: ,s est plus facile à saisir:
     
        cnoremap ,t \\_s 
    
  2. Définition d'une fonction de recherche personnalisée qui remplacer toutes les occurrences de \s avec \_s et de l'utiliser:
     
        function Search(prompt) 
         let searchstring=substitute(input(a:prompt), '\\\\s', '\\\\_s', 'g') 
         return a:prompt.searchstring."\n" 
        endfunction 
        nnoremap <expr> <special>/Search('/') 
    
    ou même
     
        function Search(prompt) 
         let searchstring=substitute(input(a:prompt), ' ', '\\\\_s', 'g') 
         return a:prompt.searchstring."\n" 
        endfunction 
        nnoremap <expr> <special>/Search('/') 
    
    (cette fonction remplace les espaces avec \_s)
Questions connexes