एमएसीएस में वर्तमान बफर का नाम कैसे प्राप्त करें?


19

मुख्य विशेषताओं में से एक जो मुझे विम के बारे में याद आती है, वह यह है कि यह हमेशा %बफर ( अधिक जानकारी ) में वर्तमान फ़ाइल का फ़ाइल नाम बचाता है । इससे कमांड को आसानी से लॉन्च किया जा सकता है:

;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...

मैं इसी तरह की कार्यक्षमता के तहत emacs(संस्करण 24, अगर इससे कोई फर्क पड़ता है) करना चाहता हूं , तो वर्तमान बफर में खोली गई फ़ाइल का नाम सम्मिलित करने का एक आसान तरीका है।

मैं क्या करना चाहता हूं इसके उदाहरण

यहां मैं कुछ बुनियादी उपयोग के मामलों का वर्णन करता हूं, ताकि जब मैं इस तरह के शॉर्टकट की आवश्यकता महसूस करूं तो बेहतर समझा जा सके

  1. संकलन: जब मैं M-x compileईमेक में प्रवेश करता हूं तो मुझसे एक कंपाइल कमांड के लिए पूछता है। मैं gcc (current-buffer)आसानी से प्रवेश करना चाहूंगा ।

  2. लोड-फ़ाइल: जब मैं अपनी .emacs फ़ाइल को संपादित कर रहा हूं, तो मैं परिवर्तनों का परीक्षण करने के लिए इसे तुरंत लोड करना चाहूंगा। जिस तरह से मैं यह कर रहा हूं M-x load-fileऔर फिर मैं हमेशा नाम का जादू करता हूं . e m a c s। मैं एक शॉर्टकट रखना चाहूंगा।

  3. बाहर की प्रक्रियाओं को लॉन्च करें: मैंने du -shएक उदाहरण के रूप में दिया , केवल यह स्पष्ट करने के लिए कि मैं चाहता हूं कि शॉर्टकट तब भी उपलब्ध हो जब मैं शेल कमांड निष्पादित करता हूंM-!

मैंने अब तक क्या पाया

  • यह प्रश्न यहां U & L पर है। दिए गए उत्तर मूल रूप से दिखा रहे हैं कि बफर का फ़ाइल नाम कहां खोजना है ताकि कोई इसे किल-रिंग में जोड़ सके। यह बिल्कुल वैसा नहीं है जैसा मैं देख रहा हूं, मैं इसका उपयोग करने से पहले फ़ाइलनाम को मैन्युअल रूप से मारना नहीं चाहता। (इसके अलावा दोनों उत्तर में वर्णित समाधान मेरे एमएसीएस में आसानी से काम नहीं करते हैं और अतिरिक्त कीस्ट्रोक्स की आवश्यकता होती है जिससे उन्हें थोड़ा दर्द होता है)।

संपादित करें : थोड़ा असंबंधित, मुझे पता चला कि ये समाधान काम क्यों नहीं करते हैं। मेरे पास आईडीओ सक्षम है, बेहतर या बदतर के लिए।

  • (current-buffer)समारोह के मैनुअल में वर्णित वर्तमान बफर में फ़ाइल का नाम वापसी करता है, लेकिन कहीं नहीं उदाहरण में मैं ऊपर दे दी है, मैं elisp कोड का मूल्यांकन कर रहा हूँ। क्या इस फ़ंक्शन के मूल्यांकन के परिणाम को एक (मिनी) बफर में डालने और एक शॉर्टकट को इस तरह से बाँधने का कोई तरीका है?

क्या मैं इस तरह से सोचना गलत हूँ?

मैं वर्तमान में विम का उपयोग करने के वर्षों के बाद emacs (यह वास्तव में कुछ महीने रहा है) का उपयोग करना सीख रहा हूं। मैं एक भविष्य कहनेवाला-इमैक-इन-ए-विम-वे ट्रैप से बचना चाहता हूं । यदि आपको लगता है कि जो मैं पूछ रहा हूं वह बहुत emacs- y नहीं है , और इसे करने के लिए एक बेहतर (क्लीनर?) तरीका होना चाहिए, तो कृपया अपने उत्तरों में इसका उल्लेख करें।


फ़ाइल नाम, .emacs के बारे में, (global-set-key (kbd "C-i") buffer-file-name)यदि आप इसे Ctrl + I होना चाहते हैं तो डाल दें। .Emacs के बारे में, M-x load-file RETजो आप चाहते हैं; आपको कुछ भी लिखने की आवश्यकता नहीं है।
इमानुएल बर्ग

2
यह वर्कफ़्लो Emacs के साथ बहुत अच्छी तरह से मेष नहीं करता है, क्योंकि विंडो की निचली रेखा पर सभी संकेत Emacs (एक मिनीबफ़र कहा जाता है) में एक बफर में हैं। इसलिए यदि आप (buffer-file-name)मिनीबफ़र में टाइप करते समय दौड़ते हैं, तो आपको मिलता है nil, क्योंकि (current-buffer)मिनीबफ़र है। मिनीबफ़र में भी आप बफ़र्स स्विच कर सकते हैं, इसलिए, यह मुश्किल है कि किस बफ़र पर नज़र रखें, जिसे आप वर्तमान बफ़र के बजाए वर्तमान बफ़र के बारे में सोचते हैं, जैसा कि Emacs देखता है, वह मिनीबफ़र है।
गिल्स एसओ- बुराई को रोकना '

जवाबों:


11

आप अपने .emacs में निम्न प्रकार से एक फंक्शन डाल सकते हैं और इसे अपनी पसंद की किसी भी कुंजी से बाँध सकते हैं।

(defun insert-file-name ()
  "Insert the full path file name into the current buffer."
  (interactive)
  (insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))

इस प्रश्न को भी देखें , ऐसा ही प्रतीत होता है।


4

@ ईजीब के उत्तर पर एक मामूली रूपांतर आपके किल रिंग में पथ को अपने बफ़र में रखने के लिए कॉपी करना है (केवल फाइलों को पढ़ने के लिए उपयोगी):

(defun filename ()   
    "Copy the full path of the current buffer."  
    (interactive)  
    (kill-new (buffer-file-name (window-buffer (minibuffer-selected-window)))))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.