6
votes

VIM Recherche et soulignant le contrôle d'un script

J'écris un script dans lequel je veux contrôler les recherches par programmation et les mettre en surbrillance. Les résultats de la fonction de recherche () ne sont pas mis en surbrillance (je pense), alors en utilisant cette fonction ne vous est pas utile.

Ce que je veux faire est d'utiliser la commande 'normale /' pour rechercher une variable, mais cela ne Il semble être simple. Je peux script la commande: xxx

(ou d'autres variations comme suggérées dans l'astuce VIM ici: http://vim.wikia.com/wiki/Unle_normal_command_in_a_script_for_sarching )

mais ça ne fait rien. Je peux voir le terme de recherche correct dans la ligne de commande après l'exécution de la ligne de script, mais la mise au point est dans le document, le registre de recherche n'a pas été modifié et le curseur n'a effectué aucune recherche. (Il semble que le ne soit entré entré, bien qu'aucune erreur ne soit lancée - et oui, j'ai essayé d'utiliser le littéral ^ m aussi.)

Je peux au moins contrôler la recherche Inscrivez-vous en faisant ceci: xxx

puis la chose évidente semble être de faire un: xxx

mais ça " Normal N 'ne fait rien si je l'exécute dans un script. Réglage du registre de recherche fonctionne, si j'appuie manuellement «N» après que le script se termine la recherche se produise (et la surbrillance apparaît, car HLSearch est activé). Je ne me soucie même pas si le curseur est positionné, je veux juste que le modèle de registre soit mis en évidence. Mais diverses combinaisons de "Set HLSearch" dans le script ne fonctionnent pas non plus.

Je sais que je pourrais utiliser "match ()", mais je veux le faire travailler avec la surbrillance de la recherche régulière et je me demande Ce que je fais mal. Ce doit être quelque chose de simple mais je ne le vois pas. Merci pour toute aide.


1 commentaires

J'ai essayé ma commande de recherche. exécuter "normal / ^ --- \ " fonctionne. Mais exécuter 'normal / ^ --- \ ' ne le fait pas.


3 Réponses :


3
votes

Si votre script utilise des fonctions, ce devis de : Aide Fonction-Search-Annuler est pertinent:

Le dernier modèle de recherche utilisé et la commande Redo "." ne sera pas modifié par la fonction. Ça aussi implique que l'effet de: nohlsearch est annulé lorsque la fonction renvoie.

VIM tente généralement de réinitialiser le motif de recherche (et quelques autres choses) lorsqu'une fonction se termine, vous pouvez souvent vous déplacer en ajoutant le N (suivant la recherche) à la fin d'une cartographie , ou en utilisant : mappe et que votre fonction renvoie la séquence de touche à exécuter.


0 commentaires

1
votes

sur une inspection de plus près, il semble \ code> n'est pas ramassé dans des guillemets simples. Essayez d'utiliser cela à la place:

execute 'normal /' . my_variable . "\<CR>"


1 commentaires

Merci. Je suis à peu près sûr que c'était la première chose que j'ai essayée et que cela n'a pas fonctionné. Je pense que vous obtenez au problème dans votre autre réponse où vous identifiez le problème avec la modification du modèle de recherche dans une fonction. Toutes les commandes que j'ai le problème sont dans une fonction, je vais donc vérifier pour confirmer.



4
votes

RUN:

let @ / = A: Searchstr

de l'intérieur de votre fonction puis exécutez

normal n

de l'extérieur de votre fonction (à l'intérieur, il ne fait rien), par exemple.

Commande -nargs = * hs appelle mysearch () | Normal n

ou vous pouvez utiliser:

SET HLSEARCH

au lieu de normal n si vous ne voulez pas que le curseur se déplace

(Je ne peux pas résoudre une autre façon de le faire sans avoir quelque chose en dehors de la fonction.)


1 commentaires

Je cherchais ça pour Sooo Long. Une chose si difficile pour Google. Votre réponse a fonctionné parfaitement et fait exactement ce que je veux!