เปลี่ยนโปรแกรมแก้ไขเริ่มต้นเป็นกลุ่มสำหรับ _ sudo systemctl edit [unit-file] _


18

[4.13.12-1-ARCH กับ gnome3 และ gdm บน Xorg]

ฉันได้ตั้งค่าภาพและตัวแก้ไข env-vars ไว้vimแล้ว ในทำนองเดียวกันฉันลองSYSTEMD_EDITOR="vim"; export SYSTEMD_EDITOR ใน ~ / .bashrc ของฉันเพื่อประโยชน์

เมื่อทำการแก้ไขไฟล์ยูนิตใน Arch (systemd) ผ่านทาง

 $ sudo systemctl edit _unit_ 

nanoฉันพบตัวเองจ้องมองที่ ชีวิตนั้นสั้นเกินไปและฉันต้องการvimโดยทั้งหมด ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


13

คุณกำลังตั้งค่าตัวแปรสำหรับผู้ใช้ของคุณเอง แต่กำลังรันsystemctlคำสั่งในฐานะ root ( sudo) ดังนั้นตัวแปรที่คุณตั้งไว้สำหรับผู้ใช้ของคุณไม่เกี่ยวข้อง

ในการแก้ไขปัญหานี้คุณสามารถ (แต่ใช้ 1):

  1. ทำงานsudoด้วย-Eดังนั้นมันจะส่งออกสภาพแวดล้อมปัจจุบัน:

    sudo -E systemctl edit _unit_
    
  2. เพิ่มตัวแปร (คุณต้องการเพียงSYSTEMD_EDITORสิ่งนี้เท่านั้น) ในรูท~/.profile:

    export SYSTEMD_EDITOR="/bin/vi" 
    

    จากนั้นวิ่งไปด้วย

    sudo -i systemctl edit _unit_ 
    

สุดท้ายโปรดทราบว่าคุณต้องระบุเส้นทางแบบเต็มไปยังเครื่องมือแก้ไขไม่ใช่แค่ชื่อ ดังนั้นจึงเป็นและไม่ได้/bin/vivim


ฉันทำงานอยู่sudo -E ...หลังจากแก้ไข/root/.bashrcแล้ว ไม่คิดว่าจะเรียกใช้ sudo เป็น login shell ( sudo -i ...) อย่างไรก็ตาม ไม่เป็นที่น่าพอใจอย่างที่คุณต้องจำธงที่เกี่ยวข้อง แต่เดี๋ยวก่อน ... มีสิ่งที่แย่กว่านั้นฉันเดาว่า ... ถึงกระนั้น (อาจจะเป็นเรื่องที่น่าสนใจ) ฉันยืนยันว่าสำหรับพวกเราบางคน: SYSTEMD_EDITOR=/usr/bin/vim; export SYSTEMD_EDITOR(เหมือนรูท) คือ ขวา. เส้นทางทั้งหมดขึ้นอยู่กับวิธีการvimติดตั้ง pkg ของคุณในปีที่ 1 บวกตามที่ฉันกำหนดเส้นทางสำหรับรูทvimก็เพียงพอแล้ว ไม่มีทางเดียวที่จะทำ ขอบคุณ @terdon
Cbhihe

1
@cbhihe อาตกลง ฉันลองด้วยเพียงvimและมันก็บ่นซึ่งเป็นเหตุผลที่ฉันพูดถึงมัน และเฮ้ฉันเป็นผู้ใช้ emacs :)
terdon

1
@Chihhe เชื่อฉันมันไม่ใช่ทางเลือกที่ง่าย ฉันยังทดสอบโดยใช้vim! ฉันใช้เวลาสามวันในการปิดสิ่งนี้
terdon

23

วิธีแรกคุณสามารถเพิ่มบรรทัดนี้ไปที่~/.bashrc:

export SYSTEMD_EDITOR=vim

จากนั้นsudo visudoและเพิ่มบรรทัดนี้:

Defaults  env_keep += "SYSTEMD_EDITOR"

เริ่มเซสชัน bash ใหม่เพื่อให้มีผลบังคับใช้จากนั้นเรียกใช้sudo systemctl edit <foo>ตามปกติ

วิธีที่สองคือการใช้update-alternatives:

ติดตั้งที่คุณต้องการeditorเช่นvim.gtk3:

$ ตัวแก้ไข
editor คือ / usr / bin / editor
$ sudo update-ทางเลือก - ติดตั้ง "$ (ตัวแก้ไขใด)" ตัวแก้ไข "$ (อัน vim.gtk3)" 15

จากนั้นเลือกที่คุณต้องการeditor:

$ sudo update-alternatives --config editor
There are 7 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /usr/bin/vim.gtk3    50        auto mode
  1            /bin/ed             -100       manual mode
* 2            /bin/nano            40        manual mode
  3            /usr/bin/code        0         manual mode
  4            /usr/bin/gedit       5         manual mode
  5            /usr/bin/vim.basic   30        manual mode
  6            /usr/bin/vim.gtk3    50        manual mode
  7            /usr/bin/vim.tiny    15        manual mode

Press <enter> to keep the current choice[*], or type selection number: 6
update-alternatives: using /usr/bin/vim.gtk3 to provide /usr/bin/editor (editor) in manual mode

วิธีที่สามตั้งค่าโดยตรงEDITORบนรันไทม์:

sudo EDITOR=vim systemctl edit <foo>

ความสำคัญอยู่ที่วิธีการแรก> วิธีที่สาม> วิธีที่สอง

อย่าพยายามตั้งค่าเครื่องมือแก้ไข "GUI" เช่นgeditเพราะเหตุใด gksu / gksudo หรือเปิดแอปพลิเคชันกราฟิกที่มี sudo ทำงานร่วมกับ Wayland ไม่ได้ และ Gedit ใช้ CPU 100% ขณะแก้ไขไฟล์


1
ขอบคุณ林果皞แต่ผมหมายจริงๆไม่vim gedit
Cbhihe

@Chihhe geditเป็นเพียงตัวอย่างที่จะพิสูจน์ว่าแม้กระทั่ง gui editor ก็สามารถใช้งานได้แน่นอนคุณสามารถใช้vimกับคำตอบนี้ได้
林果皞

1
林さんคุณพูดถูก ในความเป็นจริงฉันใช้โซลูชัน yr โดยแก้ไขไฟล์ sudoers ด้วยsudo visudo... ฉันเร็วเกินไปที่จะยอมรับคำตอบแรก สิ่งที่ฉันกำลังมองหาคือการแก้ไข/etc/suddoersไฟล์ตามที่คุณเสนอ ขอขอบคุณและขออภัยที่ไม่ได้เลือกวิธีการแก้ปัญหา ความผิดฉันเอง.
Cbhihe

[อัปเดต] geditฉันแก้ไขคำตอบของฉันที่จะเพิ่มการให้คำแนะนำไม่ได้ตั้งค่า
林果皞

0

ฉันไม่มีความอดทนกับนาโนและชอบฆ่ายุงด้วยปืนใหญ่

ฉันลบนาโนและวาง symlink เพื่อเป็นกลุ่มในสถานที่

เสร็จสิ้น


0

ฉันใช้นามแฝงเปลือก:

sc='sudo SYSTEMD_EDITOR=/bin/vi /usr/bin/systemctl'

จากนั้นเพียง:

sc edit service-name

นอกจากนี้ยังมีประโยชน์สำหรับการหลีกเลี่ยงการพิมพ์ 7 จาก 9 ตัวอักษรsystemctlในกรณีเช่นrestartฯลฯ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.