Jag letade efter ett kommando som förhoppningsvis skulle öppna den aktuella användarens favorittextredigerare, för jag skriver ut några instruktioner med kommandon i en blogg. Jag förväntade mig ett kommando som edit
och jag hittade editor
. För mig började det vim i terminalen, vilket ligger nära det Jag ville; jag använder vim-gtk. Jag började söka efter ett sätt att få redaktören att använda vim-gtk och hittade den här frågan som förklarar en $EDITOR
miljövariabel, men jag är inte säker på om det ens är relaterat till editor
-kommandot. Jag försökte man editor
, men det tog bara upp vim-manpage.
Hur kan jag få editor
att använda en textredigerare efter eget val, eller ska jag använda ett annat kommando?
Svar
Detta är en Debian-ism (och visas därför i Ubuntu, Mint, etc.). De har konfigurerat ett länkanrop ed editor
. Du kan spåra det på följande sätt:
$ which editor /usr/bin/editor $ ls -l /usr/bin/editor lrwxrwxrwx 1 root root 24 Nov 24 19:10 /usr/bin/editor -> /etc/alternatives/editor $ ls -l /etc/alternatives/editor lrwxrwxrwx 1 root root 18 Nov 24 19:46 /etc/alternatives/editor -> /usr/bin/vim.gnome $ ls -l /usr/bin/vim.gnome -rwxr-xr-x 1 root root 2403392 Oct 26 2012 /usr/bin/vim.gnome
Så att du kan se att editor
bara är en Unix-länk till den körbara vim.gnome
.
Med editor
?
Jag tror inte att jag ” d gå i den riktningen för att ställa in editor
på något meningsfullt sätt för användarna, eftersom det inte är vad jag anser vara standard.
Dessutom kan du ställa in $EDITOR
miljövariabel för att peka på allt du vill, vim
, gedit
, emacs
, etc. Men den här variabeln är bara garanterad att användas av andra verktyg som sudo
, git
och subversion
som är särskilt utformade för att kopplas till att använda variabeln $EDITOR
.
Implementeringsidéer
Jag skulle bara ställa in ett alias efter eget val och antingen instruera användarna att det är tillgängligt för dem via deras $HOME/.bashrc
-fil som alias X, eller ställa in den som en systemkonfiguration i filen /etc/profile.d/our_aliases.sh
, som alias X.
Eller så kan du bara berätta för användarna att systemen ”tillhandahåller gedit
, gvim
, vim
, emacs
osv. och skär igenom sockerbeläggningen och lär dem om dessa saker direkt.
Eller så kan du ge en text fil med namnet /etc/help.txt
som de kunde köra via ett kommando help
(alias help="less /etc/help.txt"
) i ett skal som skulle ge grundläggande kommandon och hur man utför olika uppgifter. Detta tillvägagångssätt gör att du kan anpassa hjälpen när tiden går med nya funktioner eller tips och det ger dem mer än bara editor
bekvämlighetskommando.
Kommentarer
Svar
Redigeringsprogrammet som kallas av vissa program när du ber dem redigera en fil. Du måste själv ställa in miljövariabeln.
Om du använder csh eller tcsh, vid shellprompten:
setenv EDITOR vim
Om du använder bash eller ksh, ange sedan:
EDITOR=vim; export EDITOR
(Ersätt ”vim” med den redigerare du vill använda.)
EDITOR
variabeln är den som du behöver som standard för vissa applikationer för att anropa redigeraren. Det finns en annan variabel som heter VISUAL
som används för att specificera den skärmorienterade redigeraren. I allmänhet vill du ställa in det till samma värde som EDITOR
variabeln. Ursprungligen skulle EDITOR
vara inställt på ed (en linjebaserad redigerare) och VISUAL
skulle ha ställts in på vi (en skärm- baserad redaktör).
VISUAL="vim"; export VISUAL VISUAL="$EDITOR"; export VISUAL #even better
När du har gjort detta kommer de flesta Unix-program som använder textredigerare att använda den redigerare du har ställt in. Genom att följa kommandona ovan, du ställer endast in standardredigeraren för den aktuella datorsessionen. För att göra dessa ändringar permanenta måste du placera lämpliga kommandon som beskrivs ovan i din .login
eller .cshrc
filer (för csh- eller tcsh-användare) eller din .profile
-fil (om du använder bash eller ksh).
Det finns också en annan miljövariabel om du låtsas använda Emacs. Det är ”s ALTERNATE_EDITOR
och har samma effekt, men det används när Emacs anropas med --alternate-editor
-alternativet.
Från GNU Emacs Manual :
Alternativet
--alternate-editor=command
är användbart när du köremacsclient
i ett skript. Det anger ett kommando som ska köras omemacsclient
inte kan kontakta Emacs. Till exempel, följande inställning förEDITOR
miljövariabel ger alltid en redigerare, även om Emacs inte körs:EDITOR="emacsclient --alternate-editor vi +%d %s"
Kommentarer
- Att säga
sh
betyder inte ’ t meningsfullt.sh
är vanligtvis systemet ’ s skal. Det brukade vara Thomson-skalet, sedan Bourne-skalet och sedan idag på de flesta system, ett eller annat skal implementera POSIXsh
-specifikationen.export EDITOR=vim
syntaxen är POSIX, men inte Bourne eller Thomson.export VISUAL=$EDITOR
fungerar ibash
och några implementeringar avksh
. Du behöverexport VISUAL="$EDITOR"
i de flesta andra skal.VISUAL=$EDITOR export VISUAL
fungerar i alla Bourne-liknande skal inklusive Bourne-skalet. - Är det vanligt och accepterat att ställa in
EDITOR
till ett sådant flervärdsvärde? Om så är fallet kan jag inte användawhich "$EDITOR"
ellerwhich $EDITOR
för att kontrollera om det finns.
Svar
Du måste ange editor
i miljövariabeln EDITOR
. Lägg till följande kommando i din .profile
:
export EDITOR=editor
Om du vill ha vim
som standardredigerare lägger du till istället
export EDITOR=vim
Personlig preferens: Jag använder redaktörens absoluta söknamn i miljövariabeln. Till exempel
export EDITOR=/usr/bin/vim
Svar
editor
-kommandot är ubuntu-specifikt. Det är inte bärbart eller ens vanligt (utanför ubuntu). Kommandot är också inställt i hela systemet och inte per användare. Så det fungerar är att /usr/bin/editor
bara är en symlänk till en redigerare i systemet. Som sådan är det samma för alla användare.
Miljövariabeln $EDITOR
är ganska standard. Den används av många program som behöver användaren för att redigera något. Som sådan är det den här variabeln du ska använda när du vill åberopa användarens redaktör.
Kommentarer
- Det är inte Ubuntu-specifikt, den kommer från Debian och använder Debian ’ s alternativ -mekanism. Den ’ är tillgänglig i alla Debian-derivat, inte bara Ubuntu.
Svar
Det här är vad jag använder i mitt skript:
# Find a suitable text editor editor="$VISUAL" [ -z "$editor" ] && editor="$EDITOR" [ -z "$editor" ] && which editor >/dev/null && editor=editor [ -z "$editor" ] && which nano >/dev/null && editor=nano [ -z "$editor" ] && which vi >/dev/null && editor=vi [ -z "$editor" ] && editor=no_editor_found # Use the editor we found $editor "$filename"
Jag har inte lagt in citat runt det slutliga samtalet till $editor
för att säkerställa att emacsclient-exemplet ovan fungerar.
Därför tror jag att det är viktigt att alltid ställa in något värde för editor
, annars sista raden kunde oavsiktligt köra $ filnamn . I mitt fall valde jag no_editor_found
men du kunde lika använd pico
eller ed
där.
$EDITOR
variabeln, nu har jag kan ’ inte lita på det ellereditor
symlink.s/Ubuntu/Debian/g