বর্তমান লাইনটি "খালি" (সাদা স্থান উপেক্ষা করে) কিনা তা পরীক্ষা করার সহজ উপায়?


14

আমি কেবলমাত্র বর্তমান লাইনটি খালি কিনা তা যাচাই করতে চাই (এতে যদি কেবল সাদা অংশ থাকে তবে আমি এখনও এটি খালি বিবেচনা করি)।

আমার প্রাথমিক সংস্করণটি এখানে:

(defun strip-text-properties(txt)
  (set-text-properties 0 (length txt) nil txt)
  txt)

(defun is-current-line-empty ()
  (interactive)
  (setq c-line (thing-at-point 'line))
  (string-match "^\s*$" (strip-text-properties c-line)))

বর্তমান লাইনটি খালি আছে কিনা তা যাচাই করার সহজ উপায় কী?


3
লিস্প স্ট্রিংয়ে লেখাটি লেখার \sসমতুল্য s। সম্ভবত আপনি বোঝানো হয়েছে "^\\s*$"
ইয়ংফ্রোগ

3
একটি সাধারণ মন্তব্য হিসাবে, এলিস্প একবারে বাফারের উপর ক্রিয়াগুলির বিবেচনার সাথে ভাবতে শুরু করলে আরও বেশি অর্থবোধ তৈরি করবে , যেমন স্ট্রিংগুলির সাথে কাজগুলি করার (যেমন অন্যরা অন্য ভাষায় করতে থাকে) বিপরীতে । কিছু পরীক্ষা করার জন্য একটি স্ট্রিংকে বিচ্ছিন্ন করা এবং উত্তোলন করা (ক) অদক্ষ হতে পারে এবং (খ) আপনার নিষ্পত্তি সরঞ্জামের সংখ্যা নাটকীয়ভাবে হ্রাস করতে পারে। এলিস্প সরাসরি বাফারগুলির বিষয়বস্তুগুলিতে জিনিসগুলি করতে সত্যিই ভাল
ফিলি

1
@ ইউংফ্রোগও এর \\s-পরিবর্তে হওয়া উচিত \\s। এই হাইফেনটি এলিস্প রিজেক্সেপ্টে প্রয়োজনীয়।
দক্ষ মোদী

উত্তর:



12

আপনার কাছে যা আছে তার কাছাকাছি একটি সহজ পদ্ধতি:

(defun current-line-empty-p ()
  (string-match-p "\\`\\s-*$" (thing-at-point 'line)))

আমি এই সমাধানটি পছন্দ করি কারণ এটি সংশোধন করে না match-data
নিসপিও

1
\\s-পরিবর্তে আপনার প্রয়োজন \s। আপনি কি সমাধানটি চেষ্টা করেছেন?
দক্ষ মোদী

অদ্ভুতভাবে, আমি এটি কিছুটা ব্যবহার করি। তবে আমি এই স্মৃতি বন্ধ করে লিখেছি। আপনি সঠিক.
পাইথননট

1
হাইফেন এখনও অনুপস্থিত? :)
कौशल মোদী

এটা প্রথম ছিল, এবং আমি এখনও পুরোপুরি জাগ্রত হয়নি।
পাইথননট

4
(defun blank-line-p (&optional pos)
  "Returns `t' if line (optionally, line at POS) is empty or
composed only of whitespace."
  (save-excursion
    (goto-char (or pos (point)))
    (beginning-of-line)
    (= (point-at-eol)
       (progn (skip-syntax-forward " ") (point)))))

1

আমার পরামর্শ:

(defun blank-line-p ()
  (and (progn (skip-chars-backward " ") (bolp))
       (progn (skip-chars-forward " ") (eolp))))

(দ্রষ্টব্য যে prognগুলি আসলে অপ্রয়োজনীয় কারণ এড়িয়ে যাওয়া ফাংশনগুলি কখনই শূন্য হয় না) ড্যান তার উত্তরে যেমনটি করেন, skip-syntax-*পরিবর্তে এটিও ব্যবহার করা যেতে পারে।


3
এটি ফাঁকা হিসাবে কেবল ট্যাবযুক্ত লাইন সনাক্ত করে না। skip-syntax-*এখানে ব্যবহৃত ফাংশনগুলির সঠিক সেট।
গিলস

1

comment-dwim-2প্যাকেজ থেকে নেওয়া এটির জন্য আরও একটি সহজ সমাধান is

(defun is-empty-line-p ()
  (string-match "^[[:blank:]]*$"
        (buffer-substring (line-beginning-position)
                          (line-end-position))))

1

পাইথননট তার উত্তর দিয়েছিল যা আমার পক্ষে কার্যকর হয়নি (কেন?): এটি একটি পরিবর্তন ification

(defun current-line-blank ()
  (= 0 (string-match-p "^\\s-*$" (thing-at-point 'line))))

string-match-pযখনই বর্তমান লাইন ফাঁকা ছিল না তখনই পরবর্তী লাইনের সূচি ফিরিয়ে দেয়। সুতরাং আমি যাচাই করেছি যে রিটার্ন মান 0 হয়।


পরের লাইনের সূচি? তুমি আসলে কি বোঝাতে চাও? (এবং emacs.SE তে স্বাগত!)
জিনপিয়ের

@ জিনপিয়ের (thing-at-point 'line)লাইনের শেষে নতুন লাইনটি অন্তর্ভুক্ত করেছে। যদি বর্তমান লাইনটি ফাঁকা না হয়, তবে রেজিপেক্সটি সেই নতুন লাইনে মিলবে। এখানে কেবলমাত্র string-match-pফেরতের সময়টি বাফারের শেষ লাইনে (এবং দারিও, আপনার সংস্করণটি শেষ লাইনে কাজ করে না যদি বাফার একটি নতুন লাইন দিয়ে শেষ না হয়)।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

স্ট্রিংয়ের যে কোনও লাইনের শুরুর সাথে মিল না রেখে স্ট্রিংয়ের শুরুর সাথে ম্যাচ করা আরও ভাল ফিক্স। আমি পাইথননটের উত্তর সম্পাদনা করেছি।
গিলস 'অশুভ হওয়া বন্ধ করুন'

0

current-indentation আপনাকে নীচের লিখিত প্রান্তে কলাম দেয়, যা লাইনের শেষে কলামের সাথে তুলনা করা যেতে পারে:

(defun blank-line-p ()
  (= (current-indentation)
     (- (line-end-position) (line-beginning-position))))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.