Existe-t-il un moyen de désactiver l'invite "Appuyez sur ENTRÉE ou tapez la commande pour continuer" qui apparaît après l'exécution d'une commande externe?
EDIT: trouvé une solution de contournement: ajoutez un <CR>
supplémentaire au raccourci dans mon fichier .lvimrc.
map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>
De meilleures idées?
Vous avez découvert une solution: ajoutez un <CR>
.__ supplémentaire. à la commande map.
map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>
Je ne sais pas comment le faire globalement pour une seule commande:
:silent !<command>
Assurez-vous d'inclure un espace après silent
:help hit-enter
Voici comment j'ai résolu le problème suivant: exécuter un programme externe en mode silencieux perturbe l'écran en mode texte vim (d'après mon expérience, gvim ne souffre pas de ce problème):
command! -nargs=1 Silent
\ | execute ':silent !'.<q-args>
\ | execute ':redraw!'
Utilisez-le à la place de la commande silencieuse habituelle:
:Silent top
Il s’agit peut-être d’une erreur de syntaxe dans vimrc file
La réponse d'Anthony m'a emmenée au bon endroit et j'ai pu configurer gvim pour qu'il ne se limite pas à beaucoup de messages.
J'ai ajouté set shortmess=aoOtI
à mon fichier gvimrc.
Il est expliqué dans la page d’aide qui vous est présentée par :help shortmess
.
Les lettres désignent des classes de messages que vous ne voulez pas voir ou que vous souhaitez que vim tronque pour éviter la frappe appuyez sur enter stop.
J’avais déjà réussi à le faire auparavant en définissant une grande fenêtre initiale avec columns=130
dans gvimrc, de sorte que peu de messages la surchargeraient et nécessiteraient l’ennuyeux, épuisant, le besoin d’appuyer sur Entrée.
C’est ainsi que j’exécute des commandes externes dans des scénarios difficiles sans avoir "Appuyez sur Entrée". Contrairement à :silent
, je peux toujours voir le résultat de la commande.
Ligne de commande
:exe ":!<command>" | redraw
Script/fonction
exe ':!<command>'
redraw
Mappage avec <expr>
map <expr> <F5> ":exe ':!<command>'\n:redraw\<CR>"
Mappage avec <expr>
qui appelle une fonction
map <expr> <F5> MyFoo()
fu! MyFoo()
return ":exe ':!<command>' | redraw\<CR>"
endf
Mettre un redessin avant que l’écran efface fonctionne aussi .. .. Voici ce que j’avais:
exe 'ls'
exe 'b4' "This redraws, so the Prompt is triggered
Mais cela ne déclenchera pas Invite:
exe 'ls'
redraw
exe 'b4'
Vous pouvez utiliser:
call feedkeys(" ")
Par exemple:
function! Interactive_Questions()
echo "Question 1:"
let response1 = getchar()
echo "Question 2:"
let response2 = getchar()
" Do something
" Without the next line, you would have to hit ENTER,
" even if what is written (the questions) has no interest:
call feedkeys(" ")
endf
Si votre erreur est provoquée par E303, alors la création d'un répertoire temporaire dans le fichier .vimrc
peut le réparer.
Après avoir ouvert n’importe quel fichier, écrivez et entrez:
:messages
S'il y a des erreurs, il sera invité.
Si vous voyez E303 (Error303) "Impossible d'ouvrir le fichier d'échange pour" {nom_fichier} ", récupération impossible", cela peut indiquer une ancienne tentative de récupération d'un fichier d'échange (très probablement perdu ou inexistant) dans le système. .
Pour résoudre ce problème, créez un répertoire temporaire dans le fichier .vimrc
.
Pour trouver l'emplacement du fichier .vimrc
, tapez et entrez ceci:
$ locate .vimrc
/root/.vimrc
Ouvrez le fichier $ vi .vimrc
Ajoutez ceci à la fin du fichier:
set directory=.,$TEMP
Sauvegarder et fermer avec :wq
Enfin, rechargez le profil avec:
$ . /etc/profile
Essayez d'ouvrir n'importe quel fichier avec VI. Le problème doit être résolu.
J'ai un problème similaire, mais lorsque je lance un argument pour remplacer la même chaîne dans plusieurs fichiers, par exemple,
argdo %s/something/Something/eg|update
Je devais constamment appuyer sur la page.
Vous pouvez définir l'option suivante avant d'exécuter le script afin qu'il n'y ait que l'invite finale au lieu de plusieurs invites.
:set nomore
Cela m’arrive si j’enregistre un fichier qui se trouve dans un répertoire dans lequel je n’ai pas d’autorisation d’écriture. J'ai fait un chmod 777 sur le répertoire (j'avais déjà des droits d'écriture sur le fichier lui-même) et le message "Appuyez sur Entrée" n'apparaît plus.
Mais si vous exécutez une commande à partir de la ligne de commande vim. Alors c'est un peu délicat. Vous pouvez ajouter le mot clé silent
avant votre commande. Cela vous ramènera automatiquement à la fenêtre vim après l'exécution de la commande. Mais vous devez toujours exécuter manuellement redraw
car certaines des fenêtres telles que NERD_Tree doivent être redessinées.
Dans ce cas, essayez de suivre les instructions de la documentation d'aide de vim:
Pour réduire le nombre d'invites à accès direct:
- Définissez 'cmdheight' sur 2 ou plus.
- Ajouter des drapeaux à 'shortmess'.
- Réinitialisez 'showcmd' et/ou 'règle'.
Ce lien fournit un autre moyen de sortir. Mettez ceci dans votre fichier vimrc
commander! -nargs = 1 Silent \execute 'silent!' . \| exécutez 'redessiner!'
Et ensuite, vous pouvez utiliser :Silent command
comme une commande normale.
À mes côtés, la solution était d'utiliser silent
plus fréquemment dans une chaîne de commande .
Plus précisément auparavant, .vimrc
avait:
nnoremap M :silent make\|redraw!\|cc<CR>
Cela a été changé pour:
nnoremap M :silent make\|silent redraw!\|silent cc<CR>
Auparavant, la "Presse ENTRÉE" n'était pas toujours présente, mais souvent ennuyeuse. Le silent
s supplémentaire a résolu ce problème. (Il semble que silent
ne soit pas nécessaire sur redraw!
, car :cc
a provoqué le message "Appuyez sur Entrée".)
Cette modification a pour inconvénient de ne plus afficher la sortie de
:cc
, vous devez donc deviner quelle est l'erreur. Un petit Tweak corrige ceci:nnoremap M :silent make\|redraw!\|cw\|silent cc<CR>
Cela fait apparaître automatiquement la liste des erreurs QuickFix (sortie de
make
) (et, par vim-magic, disparaître s'il n'y a pas d'erreur).
FYI:
La motivation de cette correspondance M
- consiste simplement à appuyer sur M
en mode normal pour:
make
tout est sous contrôle git
- quand même)make
Mes Makefile
s sont généralement construits de telle sorte que cela ne prend qu'une fraction de seconde.
Avec un peu de peaufinage, cela peut également s'appliquer aux charges de travail de type non -C
:
Dans .vimrc
add
set efm+=#%t#%f#%l#%c#%m#
Ceci permet à vim
d’interpréter les messages comme suit pour :cc
(erreur d’affichage):
#E#file#line#column#message#
#W#file#line#column#message#
#I#file#line#column#message#
(E
rrors, W
nings, I
nfo, basé sur la magie vim
)
Exemple d'utilisation de ceci pour Python scripts . (Désolé, pas de copie ici, c'est une autre histoire.)