Existe-t-il un moyen d'alias `: w'` à`: w`, pour éviter de créer des fichiers nommés '?

9

Parfois, mon petit doigt effleurera la 'clé en atteignant pour entrer, ce qui entraînera :w'<Enter>.

J'ai essayé:

cabbrev w' :w
cabbrev w\' :w
cabbrev "w'" :w

Aucun ne fonctionne. Y at - il un moyen d'alias :w'pour :w?

J'utilise également cmdwin ( :help cmdwin+ nnoremap : :<C-F>) au lieu de la ligne de commande normale, donc des points bonus si cela fonctionne là aussi.

mwcz
la source
3
hah; J'ai le même problème avec le \
Martin Tournoij

Réponses:

8

Comme le souligne Peter Rincker, les cmaps peuvent également s'étendre à d'autres endroits, donc ce cnoreabbrevserait mieux :

cnoreabbrev w' w

Ou, le plus sûr, encore grâce à Peter:

cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"

En vérifiant explicitement si la ligne de commande contient uniquement w', les extensions indésirables dans les situations peuvent être évitées.

Vous pouvez utiliser cmap:

cmap w' w

Vous auriez encore à appuyer Enter, mais un accidentel 'devrait être ignoré maintenant.

Si vous utilisez cmdwin, un inoremapset by autocmdpeut être utile:

autocmd CmdwinEnter * inoremap w' w
autocmd CmdwinLeave * iunmap w'
muru
la source
J'ai couru :cmap w' w, mais il n'y a pas eu de changement de comportement. :w'entraîne toujours l'écriture dans un fichier nommé '. "'" [New] 0L, 0C written.
mwcz
@mwcz L'affiche-t-elle 'réellement lorsque vous appuyez dessus après w? Cela ne devrait pas être le cas si le a cmapété créé avec succès - un cmap LHS est automatiquement rempli avec le RHS, donc si vous appuyez sur a ', il devrait toujours s'afficher w.
muru
1
Soyez prudent avec nu cmap« s et cabbrev» s. Ils s'exécuteront / se développeront dans d'autres modes et à d'autres endroits. par exemple :s/'follow'/fooet /'follow'. Veuillez voir le changement de vim suivant : fonction x pour supprimer le tampon au lieu de sauvegarder et quitter ou utilisez cmdalias.vim
Peter Rincker
1
Mieux vaut prévenir que guérir:cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"
Peter Rincker
Oui, le 's'affiche toujours, mais je viens de comprendre que c'est parce que j'utilise cmdwin pour entrer des commandes, et cmdwin est juste un tampon normal, alors cmap/cnoreabbrevne travaillez pas là-bas. Mise à jour de la réponse avec noreabbrevoption pour les utilisateurs cmdwin. :) Merci!!!
mwcz
0

Cette méthode fonctionne pour moi:

:ca w' w

Alternativement, vous pouvez configurer votre vim pour enregistrer le tampon actuel lorsque vous appuyez deux fois sur Échap, par exemple

:map <Esc><Esc> :w<CR>

Ou utilisez le mappage suivant pour enregistrer le fichier par Ctrl+ sou F2:

nmap <c-s> :w<CR>
vmap <c-s> <Esc><c-s>gv
imap <c-s> <Esc><c-s>

nmap <F2> :update<CR>
vmap <F2> <Esc><F2>gv
imap <F2> <c-o><F2>

Remarque: F2 enregistre uniquement si nécessaire et renvoie l'utilisateur en mode insertion (ou restaure sa sélection visuelle), si nécessaire.

Source: Enregistrer un fichier sur vim wikia

Ou utilisez les alternatives suivantes:

  • :up( :update) pour:w
  • ZQ pour :q
  • ZZpour :wqou:x
Kenorb
la source
Notez le guillemet dans la question. :w'non :w. Je veux utiliser :wsans frapper accidentellement ', ce qui écrit un fichier que je dois ensuite rm \'. De bons conseils, cependant.
mwcz
1
Ctrl-S n'envoie pas de sigstop - si le programme s'arrête, c'est probablement parce qu'un tampon était plein. Voir unix.stackexchange.com/questions/13629/… '
muru