मैं Emacs में वर्तमान लाइन को कैसे हटा सकता हूं?


122

Vi के समतुल्य emacs क्या है dd? मैं वर्तमान लाइन को हटाना चाहता हूं। कोशिश की CTRL+ kलेकिन यह केवल वर्तमान स्थिति से हटाता है

जवाबों:


212
C-a # Go to beginning of line
C-k # Kill line from current point

वहाँ भी

C-S-backspace   # Ctrl-Shift-Backspace

जो आह्वान करता है M-x kill-whole-line

यदि आप एक अलग वैश्विक कुंजी बाइंडिंग सेट करना चाहते हैं, तो आप इसे ~ / .emacs में डालेंगे:

(global-set-key "\C-cd" 'kill-whole-line)     # Sets `C-c d` to `M-x kill-whole-line`

यदि आप कई सारी पंक्तियों को हटाना चाहते हैं, तो आप एक संख्या के साथ कमांड को उपसर्ग कर सकते हैं:

C-u 5 C-S-backspace    # deletes 5 whole lines
M-5 C-S-backspace      # deletes 5 whole lines

C-u C-S-backspace      # delete 4 whole lines. C-u without a number defaults to 4

C-u -5 C-S-backspace   # deletes previous 5 whole lines
M--5 C-S-backspace     # deletes previous 5 whole lines

कभी-कभी मुझे C-x zमददगार भी मिल जाता है:

C-S-backspace         # delete 1 whole line
C-x z                 # repeat last command
z                     # repeat last command again. 
                      # Press z as many times as you wish. 
                      # Any other key acts normally, and ends the repeat command.

यह काम। क्या एक कमांड का उपयोग करके ऐसा करने का कोई तरीका है? क्या मुझे ऐसा करने के लिए एक कस्टम कुंजी बंधन बनाना होगा?
मनोज गोविंदन

14
पता नहीं था C-x z, यह वास्तव में अच्छा है। और अच्छा और सटीक जवाब btw।
स्लू

2
वहाँ भी है C-k C-kजो थोड़े d$ S-jvim में एक तरह काम करता है , लेकिन यह काफी अच्छी तरह से आगे लाइनों को हटा सकता है।
थियो बेलैयर

इसमें जगह क्यों नहीं है C-cd?
इलियट गोरोखोवस्की

@ RenéG: अंतरिक्ष वैकल्पिक है।
अनटुब

11

मामले में आप लाइन को मारना नहीं चाहते हैं (जो इसे ओएस क्लिपबोर्ड में डाल देगा और रिंग को मार देगा) लेकिन बस इसे हटा दें:

(defun delete-current-line ()
  "Delete (not kill) the current line."
  (interactive)
  (save-excursion
    (delete-region
     (progn (forward-visible-line 0) (point))
     (progn (forward-visible-line 1) (point)))))

3

मारने की अंगूठी में रखने के बिना लाइन को हटाने का एक और तरीका:

(defun delete-current-line ()
  "Deletes the current line"
  (interactive)
  (delete-region
   (line-beginning-position)
   (line-end-position)))

यह एक रिक्त रेखा की शुरुआत में बिंदु को छोड़ देगा। इस से भी छुटकारा पाने के लिए, आप (delete-blank-lines)फ़ंक्शन के अंत में कुछ जोड़ना चाह सकते हैं , जैसा कि इस उदाहरण में है, जो शायद थोड़ा कम सहज है:

(defun delete-current-line ()
 "Deletes the current line"
 (interactive)
 (forward-line 0)
 (delete-char (- (line-end-position) (point)))
 (delete-blank-lines))

1

किसी भी चीज़ को चुने बिना, लाइन पर किसी भी बिंदु से, एक पूर्ण लाइन को हटाने (मारने) का सबसे तेज़ / सरल तरीका है:

C-w  ; kill-region

जो कुछ भी चुना गया है, उसे डिलीट करने में बहुमुखी है, या कुछ भी नहीं चुने जाने पर डिफ़ॉल्ट रूप से एक लाइन।

इस प्रश्न को देखते हुए, आप शायद विम के "यंक" की नकल करने में भी रुचि रखते हैं, yy(हालांकि एमएसीएस पार्लेंस में "यंक" भ्रामक रूप से विम का "पुट" है p)। ये है:

M-w  ; kill-ring-save

अच्छा और बधाई, और याद रखने में बहुत आसान है। यहां तक ​​कि विम के समान थोड़ा i_CTRL-W

एक बार जब आप उपरोक्त दोनों में से किसी एक को मार डालते हैं, तो आप इसे "यैंक" (पेस्ट) करना चाहेंगे:

M-y  ; yank-pop

(ध्यान दें कि CS-backspace Emacs में काम नहीं कर सकती है।)


1

लाइन को हटाने के लिए अलग कुंजी होने के बजाय, या उपसर्ग-तर्क को लागू करने के लिए। आप क्रूक्स-स्मार्ट-किल-लाइन का उपयोग कर सकते हैं जो " लाइन के अंत तक मार देगा और अगली कॉल पर पूरी लाइन को मार देगा"। लेकिन अगर आप deleteइसके बजाय पसंद करते हैं kill, तो आप नीचे दिए गए कोड का उपयोग कर सकते हैं।

पॉइंट-टू-स्ट्रिंग ऑपरेशन (किल / डिलीट) के लिए मैं zop-to-char का उपयोग करने की सलाह देता हूं

(defun aza-delete-line ()
  "Delete from current position to end of line without pushing to `kill-ring'."
  (interactive)
  (delete-region (point) (line-end-position)))

(defun aza-delete-whole-line ()
  "Delete whole line without pushing to kill-ring."
  (interactive)
  (delete-region (line-beginning-position) (line-end-position)))

(defun crux-smart-delete-line ()
  "Kill to the end of the line and kill whole line on the next call."
  (interactive)
  (let ((orig-point (point)))
    (move-end-of-line 1)
    (if (= orig-point (point))
        (aza-delete-whole-line)
      (goto-char orig-point)
      (aza-delete-line))))

स्रोत

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.