2011-04-26 2 views
4

Je voudrais mapper une clé en utilisant « la carte » à partir de mon fichier vimrc comme ceci:Comment appeler la fonction de vim à partir de la carte et « : split »

map <C-I> :split ~/some/file 

Cette commande fonctionne réellement bien.

Ma question est: comment puis-je appeler une fonction vim (dans ce cas, "resolve()") sur ce chemin de fichier à partir de la ligne de carte/split. Cela ne fonctionne pas, mais nous espérons que vous obtenez le point:

map <C-I> :split =resolve("~/some/file") 

Peut-être utilise appel()? Je suis évidemment confus au sujet des scripts vim en général. Merci de votre aide!

Répondre

6

Il y a deux façons supplémentaires de faire ce qui travaillent à l'extérieur d'une cartographie et plus sûrs, puis en utilisant <C-r> (POSIX permet des noms de fichiers avec un octet, mais \x00, y compris les codes de contrôle):

nnoremap <C-i> :execute "split" fnameescape(resolve("~/some/file"))<CR> 
nnoremap <C-i> :split `=resolve("~/some/file")`<CR> 

En second cas aucun échappement n'est nécessaire, mais le nom de fichier ne doit pas contenir de retour à la ligne (il ne blessera pas, mais produira une erreur).

Une autre chose à considérer:

  1. Utilisez nnoremap, il vous permettra, par exemple, l'échange des significations de ; et : sans changer de cartes et d'éviter également votre carte d'être gâté par les plugins à moins qu'ils redéfinissent <Tab> la cartographie (<C-i> est la même que <Tab>). Le mode normal forcé est ici car dans d'autres modes, il produira des résultats inattendus.
  2. Escape arguments: fnameescape(resolve("~/some/file")), il permettra d'éviter les erreurs pour les noms de fichiers avec des espaces.
  3. Vous pouvez écrire <C-r> où @ Austin Taylor a suggéré d'écrire du code de contrôle brut. Je n'aime pas en avoir dans un fichier car cela rendra les différences non visibles dans un terminal.
1
map <C-I> :split ^R=resolve("~/some/file")<cr><cr> 

Si vous mettez cela dans .vimrc, vous tapez C-v C-r pour saisir le caractère ^R.

+0

Merci! J'avais oublié que^R est "insert" pour le mode commande. – svec

Questions connexes