87 votes

Comment puis-je ouvrir un fichier en lecture seule à partir de la ligne de commande avec emacs/vi/vim

Y a-t-il un moyen de dire à emacs/vi/vim (depuis la ligne de commande) que je veux voir le fichier en mode de visualisation ou en lecture seule.

Je sais comment ouvrir un fichier en lecture seule si emacs/vi/vim est déjà en cours d'exécution.

0 votes

Note : si vous n'avez pas les permissions en écriture sur le fichier, Vim l'ouvrira par défaut en mode lecture seule. En fait, je pense qu'il est plus facile de contrôler les permissions du fichier que de fournir un moyen "lecture seule".

149voto

RedGrittyBrick Points 78148

Vim -R nom_fichier

5 votes

Fonctionne bien mais j'ai accepté la réponse de Trey parce que je préfère emacs à vim

33 votes

Et tous les utilisateurs de Vim prennent leur revanche en votant plus que la "réponse acceptée" :D

1 votes

Note : certaines boîtes semblent avoir la commande 'view' peut-être des alias pour 'vi -R'.

52voto

crackity_jones Points 1112

Pour Emacs :

emacs FICHIER --eval '(setq buffer-read-only t)'

Il n'y a pas d'option de démarrage pour forcer la lecture seule.

Éditer :
Si vous mettez cette petite fonction dans votre script de démarrage de shell (.bashrc par exemple), vous pouvez ouvrir un fichier en lecture seule en tapant ev fichier_a_voir

ev() {
  emacs "$1" --eval '(setq buffer-read-only t)'
}

11 votes

Je souhaite pouvoir voter négativement pour emacs pour cela.

2 votes

Pour ouvrir plus d'un fichier, le "-eval ..." doit être répété après chaque nom de fichier, sinon seul le dernier fichier de la liste est ouvert en lecture seule.

1 votes

Astuce rapide et sale pour travailler avec plusieurs fichiers ouverts sur la ligne de commande : emacs --eval "(add-hook 'find-file-hook (defun make-read-only () (setq buffer-read-only t)))" fichier1 fichier2 ...

26voto

Marcin Rybacki Points 411

Afficher le nom du fichier

Essentiellement vim en mode lecture seule; simple!

Comme indiqué dans le commentaire, au cas où view est lié à vi standard, voici des commandes bash pour d'abord inspecter la situation et ensuite la corriger:

# inspection non destructive
which vim
which view
ls -l $(which view)

# écraser la vue actuelle avec un lien symbolique vers vim, nécessite les droits d'administration
ln -sfv $(which vim) $(which view)

1 votes

Pas de surlignage syntaxique.

7 votes

@Nifle : Il ne devrait pas y avoir de différence dans la coloration syntaxique. Si votre vim a une coloration syntaxique mais que votre view ne l'a pas, peut-être que votre view est un lien vers une version minimale de vim qui n'a pas la coloration syntaxique compilée. Comparez les sorties de la commande :version.

1 votes

Raison pour laquelle cela fonctionne simplement : Vim lira réellement argv[0] pour décider de son comportement. C'est une astuce courante ; autant que je sache parfois GCC et Bash font cela aussi.

10voto

vim -R 

permet d'écrire avec :w!

vim -c ":set nomodifiable"  

Empêche l'utilisateur de faire des modifications sur le fichier en mémoire. Mais l'utilisateur pourrait rendre le fichier modifiable avec :set modifiable

Vous pourriez utiliser

vim -c ":noremap q :q" -c ":map : " -c ":set nomodifiable" 

pour empêcher l'utilisateur de désactiver le "nomodifiable", et permettre à l'utilisateur de quitter en appuyant sur q. Mais, alors l'utilisateur ne pourra pas entrer en mode commande du tout, ce qui peut être ce que vous voulez ou non.

Vous pourriez également ouvrir le fichier avec la commande less :

less 

Pour visualiser le fichier dans un environnement similaire à vim mais sans la possibilité de modifier le fichier.

0 votes

+1 pour l'utilisation de moins, bien que comme le souligne @nxdrvr vous pouvez appuyer sur la touche v pour ouvrir le fichier en mode éditable dans vi

9voto

patrick Points 1450

Petit suivi de la réponse acceptée : vous pouvez aliaser ceci dans votre shell pour le réduire à une seule commande. Par exemple en bash vous pouvez mettre ce qui suit dans votre .bashrc :

emacsro() {
  emacs $1 --eval '(setq buffer-read-only t)'
}

(différents shells auront des formats différents pour le faire, mais vous avez l'idée)

J'aurais ajouté ceci comme commentaire en réponse à la réponse acceptée, mais il ne semblait pas possible d'avoir un bloc "code" sur plusieurs lignes dans un commentaire, et (en bash en tout cas) le code ci-dessus a vraiment besoin d'être sur 3 lignes séparées.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X