আপনি কীভাবে স্বয়ংক্রিয়ভাবে ভিএম-এর পিছনে সাদা স্থান সরিয়ে ফেলতে পারেন


197

গিটের মধ্যে কিছু ফাইল কমিট করার চেষ্টা করে আমি 'পেছনের শ্বেতস্থান' ত্রুটি পাচ্ছি।

পাইথন ফাইলগুলি সংরক্ষণ করার আগে আমি এই পেছনের সাদা স্থানগুলি স্বয়ংক্রিয়ভাবে সরিয়ে দিতে চাই।

এটি করার জন্য আপনি কি ভিআইএম কনফিগার করতে পারেন? যদি তাই হয়, কিভাবে?


3
এটি একাই

2
আমার ডিলিটট্রাইলিংয়েটস্পেস প্লাগইনটি ব্যবহার করুন ।
ইনগো কারকাত

উত্তর:


208

আমি উত্তর এখানে খুঁজে পেয়েছি ।

আমার .vimrc ফাইলটিতে নিম্নলিখিতগুলি যুক্ত করা কৌশলটি করেছে।

autocmd BufWritePre *.py :%s/\s\+$//e

1
মজাদার! শ্বেত স্থানের পিছনে পিছনে কাজ করা যুদ্ধের লড়াই is আমি এটি ঘৃণা করি, অন্যরা কেন বুঝতে পারে না। আমরা ভিমের মতোই vi ব্যবহার করি (আমি vim ব্যবহার করি; তারা এটি ইনস্টল করতে হবে কারণ তারা তা করে না)। আমার স্ট্রিপ ট্রেলিং ব্ল্যাঙ্কসকে কল করে একটি প্রোগ্রাম রয়েছে এবং আমি এটি ফিল্টার হিসাবে ব্যবহার করি; vi তেও কাজ করে। ইহা ভাল.
জোনাথন লেফলার

16
এটি প্রতিটি সংরক্ষণে কার্সারের অবস্থান পরিবর্তন করে। এড়ানো কি সম্ভব?
স্টেপেনচেগ

3
যেহেতু এই প্রশ্নের উত্তর এটিই সম্ভবত কার্সার অবস্থান বজায় রাখতে এটি আপডেট করা উচিত।
এডু ফিলিপ

2
এটি মাল্টি-লাইন স্ট্রিংগুলিতে চলমান স্থানগুলিও মুছে ফেলবে, যা কিছু ক্ষেত্রে পছন্দসই নয়। তবে আমার ধারণা এড়াতে কোনও সহজ উপায় নেই?
luator

3
হতে পারে আপনি স্পষ্ট করে বলতে পারেন যে e
শেষটির

169

উপরের প্লাস সংরক্ষণ কার্সার অবস্থানের সংকলন:

fun! <SID>StripTrailingWhitespaces()
    let l = line(".")
    let c = col(".")
    keepp %s/\s\+$//e
    call cursor(l, c)
endfun

autocmd FileType c,cpp,java,php,ruby,python autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()

আপনি যদি কোনও ফাইলের সংরক্ষণে এটি প্রয়োগ করতে চান তবে দ্বিতীয়টি ছেড়ে যান autocmdএবং একটি ওয়াইল্ডকার্ড ব্যবহার করুন *:

autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()

9
আপনি সর্বশেষ অনুসন্ধানটি সংরক্ষণ করে এবং এটি পুনরুদ্ধার করে আপনার ফাংশনটি আরও ভাল করতে পারেন। চলুন _s = @ / চলুন @ / = _ গুলি
x অ্যাপল

3
আমি সমস্ত autocmd FileType c,cpp,java,php,ruby,python অংশে প্রয়োগ করার জন্য অংশটি সরিয়েছি ।
swt83

8
@ এক্স অ্যাপল: ফাংশনগুলির অভ্যন্তরে, শেষ অনুসন্ধানটি সংরক্ষণ এবং পুনরুদ্ধার করা প্রয়োজনীয় নয় - ফাংশন প্রসঙ্গটি রেখে দেওয়া এটির যত্ন নেবে।
টোবিয়াস

3
@ swt83 আপনার কাছে প্রতিস্থাপন করা প্রয়োজন <buffer>সঙ্গে *যদি আপনি সেই সমস্ত ফাইলে কাজ করার জন্য এটি করতে চান
cadlac

3
আপনি যদি বিকল্প কমান্ড keeppkeepp %s/\s\+$//e
ডাব্লু

68

আমারও সাধারণত:

match Todo /\s\+$/

আমার .vimrcফাইলে, যাতে লাইন শ্বেত স্পেসের শেষটি হিলাইট হয়।

করণীয় একটি বাক্য গঠন hilighting হচ্ছে গ্রুপ-নাম যে ভালো কিওয়ার্ড hilighting জন্য ব্যবহার করা হয় TODO, FIXMEবা XXX। এটিতে বিরক্তিকরভাবে কুৎসিত হলুদ বর্ণের ব্যাকগ্রাউন্ডের রঙ রয়েছে এবং আমি আপনার কোডটিতে যা চাই না তা হাইলাইট করা সবচেয়ে ভাল :-)


7
অথবা আপনি তালিকা সেট করতে পারেন এবং তালিকাচরিত সেট করতে পারেন + = ট্রেইল:।
অলি

চমত্কার - এটি স্বয়ংক্রিয়ভাবে পেছনের শ্বেত স্থানটি অপসারণের মধ্যে নিখুঁত মাঝারি ক্ষেত্র (যদিও আমি এটি সম্পর্কে সচেতন নাও হতে পারি বা যখন অন্য কারও কোডের সাথে আমি একই ফাইলটিতে কাজ করার জন্য ঘটছি), এটি সম্পর্কে কিছু না করার জন্য । ধন্যবাদ।
ড্যানিয়েল হার্শকোভিচ

2
দুর্ভাগ্যক্রমে, আমার প্রিয় রঙের স্কিমটি জেনবার্ন হাইলাইট করে না
পিটার লং

@ পিটারলং, রেলকাস্ট থিমটিতেও কাজ করে না। এটি দিয়ে পরীক্ষা করুন :hi Todo। তাই আমি অনুভূত :hi <Tab>এবং :help hi। আমি বিবেচনা করেছি Cursorএবং Error, তবে আমি মনে করি চেষ্টা করব match VisualNOS /\s\+$/ । আমি autocmdএখানে অন্যান্য উত্তর থেকে কিছু গুলি এর সাথে এটি একত্রিত করতে পারি ।
ব্র্যাডি ট্রেইনার

51

আমি উভয় বিদ্যমান ট্রেলিং হোয়াইটস্পেস হাইলাইট করি এবং ট্রেলিং হোয়াইটস্পেস স্ট্রিপও করি।

আমি শেষে আমার সাদা স্থান প্রদর্শনের জন্য আমার সম্পাদক (ভিএম) কনফিগার করেছি, যেমন eg

এখানে চিত্র বর্ণনা লিখুন

আমার .vimrc এর নীচে এটি সহ:

highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

এবং আমি ফাইলগুলি সেভ করার সময় এটি থেকে 'অটো-স্ট্রিপ' করি, আমার ক্ষেত্রে রুবি ফাইলের জন্য * .rb, আবার আমার ~ / .vimrc এ

function! TrimWhiteSpace()
    %s/\s\+$//e
endfunction
autocmd BufWritePre     *.rb :call TrimWhiteSpace()

13

একাধিক ফাইল টাইপ দ্বারা ফিল্টার করার একটি উপায় এখানে।

autocmd FileType c,cpp,python,ruby,java autocmd BufWritePre <buffer> :%s/\s\+$//e

প্রতিটি ফাইল: অটোকিমডি ফাইলটাইপ * অটোকএমডি বুফউইটপ্রাই <বুফার>:% s / \ s \ + $ // ই
জেরেম

7

Http://blog.kamil.dworakowski.name/2009/09/unobtrusive-hightlight-of-trailing.html থেকে অনুলিপি এবং আটকানো হয়েছে (লিঙ্কটি আর কাজ করে না, তবে আপনার যে বিটটি প্রয়োজন সেটি নীচে রয়েছে)

"লাইনের শেষে আপনার টাইপ করা প্রতিটি স্থান হাইলাইট না করার সুবিধা রয়েছে, কেবলমাত্র আপনি যখন ফাইল খুলবেন বা সন্নিবেশ মোডটি ছেড়ে যাবেন তখন খুব ঝরঝরে"।

highlight ExtraWhitespace ctermbg=red guibg=red
au ColorScheme * highlight ExtraWhitespace guibg=red
au BufEnter * match ExtraWhitespace /\s\+$/
au InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
au InsertLeave * match ExtraWhiteSpace /\s\+$/

1
ব্লগ লিঙ্কটি মারা গেছে বলে মনে হচ্ছে।
টোবিয়াস

"ম্যাচ কমান্ড ব্যবহার করে" এর অধীনে এই লিঙ্কটিতে একই সমাধান পাওয়া যায় ।
রায়ানজডিলন

6

আমি ভিআইএম উইকিয়ায় একটি মন্তব্যে এই সমাধানটি দেখেছি - অযাচিত স্থানগুলি সরান

আমি সত্যিই এটি পছন্দ করেছি. .অযাচিত সাদা জায়গাগুলিতে একটি যুক্ত করে।

এখানে চিত্র বর্ণনা লিখুন

এটি আপনার মধ্যে রাখুন .vimrc

" Removes trailing spaces
function TrimWhiteSpace()
  %s/\s*$//
  ''
endfunction

set list listchars=trail:.,extends:>
autocmd FileWritePre * call TrimWhiteSpace()
autocmd FileAppendPre * call TrimWhiteSpace()
autocmd FilterWritePre * call TrimWhiteSpace()
autocmd BufWritePre * call TrimWhiteSpace()

5

এইভাবে আমি এটি করছি। টিবিএইচ থেকে আমি এটি কোথায় চুরি করেছি তা মনে করতে পারছি না।

autocmd BufWritePre * :call <SID>StripWhite()
fun! <SID>StripWhite()
    %s/[ \t]\+$//ge
    %s!^\( \+\)\t!\=StrRepeat("\t", 1 + strlen(submatch(1)) / 8)!ge
endfun

2
হুম, "*" এটি করা বেশ বিপজ্জনক যদি আপনি অবশেষে বাইনারি ফাইলগুলি খোলেন তবে সেগুলি বেশ খারাপ আকার ধারণ করতে পারে।
মাদুর

হ্যাঁ, সম্ভবত স্মার্ট নয়, তবে আমি আবার কোনও হেক্স সম্পাদকের জন্যও ভিএম ব্যবহার করি না। আপনি সংরক্ষণ না করা হলে এটি কার্যকর হবে না।
গ্রেগএফ

আমি মনে করি এটি আপনার প্রতি কাজ করতে পারে এমন প্রতিটি ফাইল টাইপের তালিকার বিকল্পকে মারবে? আমি আরবি, পিএইচপি, সিএস, এইচটিএমএল, স্যাস, সিএসএস, জেএস, কফি, এক্সএমএল, এক্সএসল্ট, পিএল, ইত্যাদি ইত্যাদি ইত্যাদিতে কাজ করি ... কোন খুশি মাধ্যম আছে?
ডেরেক আগে

4
আপনি যদি ভিআইএম-তে বাইনারি ফাইলগুলিতে লিখেন না তবে এটি সম্ভবত কোনও সমস্যা হবে না।
গ্রেগফ

এটি প্রথম প্রদর্শিত হবে %sবিশ্বব্যাপী (ছ) পতাকাটি EOL :-) এ স্থানের মতোই অকেজো
জেনস

3

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

মনে করুন যে আপনি আপনার কাজের সাথে অপ্রাসঙ্গিক এমন পরিবর্তনগুলি মুক্ত রাখতে আপনার সম্পাদনা করেন না এমন লাইনে বিদ্যমান শ্বেত স্পেসকে প্রভাবিত না করেই কেবল সাদা বর্ণের স্থান অনুসরণের নতুন উদাহরণ যুক্ত না করার ইচ্ছা প্রকাশ করেছেন।

সেক্ষেত্রে গিট সহ আপনি এই জাতীয় স্ক্রিপ্ট ব্যবহার করতে পারেন:

#!/bin/sh

set -e # bail on errors

git stash save commit-cleanup
git stash show -p | sed '/^\+/s/ *$//' | git apply
git stash drop

এটি বলার জন্য, আমরা পরিবর্তনগুলি স্ট্যাশ করি এবং তারপরে +শুকনো স্পেসটি অপসারণ করতে ডিফের সমস্ত লাইন ফিল্টার করি কারণ আমরা পরিবর্তনটি কার্যকরী ডিরেক্টরিতে পুনরায় প্রয়োগ করি। যদি এই কমান্ড পাইপটি সফল হয় তবে আমরা স্ট্যাশটিকে ফেলে দিই।


1

.vimrcফাইলটিতে ব্যবহৃত হওয়ার সাথে সাথে এখানে অন্য পদ্ধতির কোনওভাবেই ম্যাকভিমে আমার জন্য কাজ করেনি didn't সুতরাং এখানে একটি যা ট্রেলিং স্পেসগুলি হাইলাইট করে এবং হাইলাইট করে:

set encoding=utf-8
set listchars=trail:·
set list

নির্বাহ set listchars=trail:·বলেন: E474: Invalid argument: listchars=trail:·। আপনি আপনার উদাহরণ যাচাই করতে পারেন?
কেনোরব

1
mb21


0

নির্দিষ্ট ফাইল টাইপের জন্য এটি চালাতে চান এমন লোকদের জন্য (ফাইল টাইপগুলি সর্বদা নির্ভরযোগ্য নয়):

autocmd BufWritePre *.c,*.cpp,*.cc,*.h,*.hpp,*.py,*.m,*.mm :%s/\s\+$//e

অথবা ভিএম 7 সহ:

autocmd BufWritePre *.{c,cpp,cc,h,hpp,py,m,mm} :%s/\s\+$//e

0

যদি আপনি হোয়াইটস্পেস ট্রিম করেন তবে আপনার কেবল এটি ইতিমধ্যে পরিষ্কার থাকা ফাইলগুলিতে করা উচিত । "যখন রোমে...". কোডবেজগুলিতে কাজ করার সময় এটি উত্তম শিষ্টাচার যেখানে প্রফুল্ল পরিবর্তনগুলি অপ্রয়োজনীয়।

এই ফাংশনটি পূর্ববর্তী শুকনো স্থানটি সনাক্ত করে এবং যদি এটি ইতিমধ্যে পরিষ্কার ছিল তবেই ট্রিমিং চালু করে।

এই ধারণার কৃতিত্ব এখানে একটি মন্তব্যের রত্নের কাছে যায়: https://github.com/atom/whitespace/issues/10 (এখন পর্যন্ত দীর্ঘতম বাগের টিকিট মন্তব্য স্ট্রিম)

autocmd BufNewFile,BufRead *.test call KarlDetectWhitespace()

fun! KarlDetectWhitespace()
python << endpython
import vim
nr_unclean = 0
for line in vim.current.buffer:
    if line.rstrip() != line:
        nr_unclean += 1

print "Unclean Lines: %d" % nr_unclean
print "Name: %s" % vim.current.buffer.name
cmd = "autocmd BufWritePre <buffer> call KarlStripTrailingWhitespace()"
if nr_unclean == 0:
    print "Enabling Whitespace Trimming on Save"
    vim.command(cmd)
else:
    print "Whitespace Trimming Disabled"
endpython
endfun

fun! KarlStripTrailingWhitespace()
    let l = line(".")
    let c = col(".")
    %s/\s\+$//e
    call cursor(l, c)
endfun

আপনি অনুসন্ধানের let _s=@/নিবন্ধটিও রাখতে পারেন এবং শেষে এটি পুনরুদ্ধার করতে পারেন - যাক @ / = _ s` `এই ক্ষেত্রে আমরা ব্ল্যাকহোল রেজিস্টারটি ব্যবহার করছি
সেরজিওআরাউজো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.