অ-এস্কি অক্ষর হাইলাইট করতে কীভাবে ভিম পাবেন?


153

আমি ভিমকে অ-এসকিআইআই অক্ষর হাইলাইট করার চেষ্টা করছি। এটি করার জন্য কি কোনও উপলব্ধ সেটিং, রেজেক্স অনুসন্ধানের প্যাটার্ন বা প্লাগইন রয়েছে?

উত্তর:


291

[]আপনার সন্ধানের একটি অক্ষর শ্রেণিতে ব্যাপ্তি ব্যবহার করে , আপনাকে ASCII হেক্সাডেসিমাল চরিত্রের সীমাটি বাদ দিতে সক্ষম হবেন , সুতরাং ASCII সীমার বাইরেhlsearch থাকা অন্যান্য সমস্ত অক্ষরকে হাইলাইট করে (আপনার সক্ষম করেছেন ধরে নেওয়া ) :

/[^\x00-\x7F]

এটি ASCII এবং ASCII (0-127) এর মধ্যে অক্ষরের জন্য একটি নেতিবাচক ম্যাচ করবে (মাধ্যমে ), এবং আমার সাধারণ পরীক্ষায় কাজ করে বলে মনে হচ্ছে। বর্ধিত এএসসিআইআইয়ের জন্য অবশ্যই ব্যবহারের পরিবর্তে ব্যাপ্তি বাড়ান ।[^]0x000x7F\xFF\x7F/[^\x00-\xFF]

আপনি এটি দশমিক মাধ্যমে এর মাধ্যমে প্রকাশ করতে পারেন \d:

/[^\d0-\d127]

আপনার যদি প্রিন্টযোগ্য অক্ষরগুলি বাদ দেওয়ার মতো আরও নির্দিষ্ট কিছু প্রয়োজন হয় তবে আপনার এই ব্যাপ্তিগুলি অক্ষর শ্রেণিতে যুক্ত করতে হবে []


14
দশমিক:/[^\d0-\d127]
বোহর

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

মহান! দিন বাঁচাল! ইনডেন্টেশন চরিত্রগুলির মধ্যে একটি আমার অজগর কোডে আটকে গেল এবং ইউনিকোড ত্রুটিটি আমাকে হত্যা করতে শুরু করল। ভিএম প্লাগইন দ্বারা ব্যবহৃত একই চরিত্রটির মধ্যে সনাক্ত করা শক্ত ছিল!
ক্যালারি 13

36

হ্যাঁ, কোনও মিলিত স্ট্রিংয়ের জন্য হাইলাইট করার জন্য একটি দেশীয় বৈশিষ্ট্য রয়েছে। ভিমের ভিতরে, করুন:

:help highlight
:help syn-match

syn-matchএকটি স্ট্রিং সংজ্ঞা দেয় যা ম্যাচগুলিতে একটি গ্রুপে পড়ে। highlightগ্রুপ দ্বারা ব্যবহৃত রঙ নির্ধারণ করে। আপনার ভিআইএমআরসি ফাইলগুলির জন্য সিনট্যাক্স হাইলাইট করার কথা ভাবুন।

সুতরাং আপনি আপনার .vimrc ফাইলটিতে নীচের আদেশগুলি ব্যবহার করতে পারেন:

syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2

আপনি করা প্রয়োজন হবে না :আপনার vimrc কমান্ড সামনে।
এফডিনফ

termbgউবুন্টু সার্ভার 12.10 এ ইনস্টল করা হিসাবে ভিআইএম 7.3-তে কোনও আইনি কমান্ড বলে মনে হচ্ছে না।
দোটানকোহেন

4
তারপর termbgউবুন্টু সার্ভার 12.10 ইনস্টল যেমন VIM 7.3 একটি আইনি প্যারামিটার হবে বলে মনে হচ্ছে না।
dotancohen

প্রকৃতপক্ষে, নিয়মিত টার্মিনালের termপটভূমির রঙ থাকতে পারে না, রঙিন টার্মিনালটি ctermপারে can
দিমা তিসনেক

অপসারণ করা termbg কিন্তু আপনি অগ্রভাগ নিয়ন্ত্রণ করতে ctermfg, guifg, ইত্যাদি যোগ করতে পারে।
মারাত্মক_অরর

16

অন্যদের জন্য (এখন থেকে কম দুর্ভাগ্যজনকভাবে) লোকেরা এখানে অনুসন্ধান ইঞ্জিনের মাধ্যমে শেষ হয় এবং অ-এসসিআইআই অক্ষর হাইলাইটিং সম্পন্ন করতে পারে না, এটি চেষ্টা করে দেখুন (এটি আপনার .vimrc এর মধ্যে রাখুন):

highlight nonascii guibg=Red ctermbg=1 term=standout
au BufReadPost * syntax match nonascii "[^\u0000-\u007F]"

এটির নিয়মিত (ফাইল টাইপ [ফাইল এক্সটেনশন] ভিত্তিক) সিনট্যাক্স সংজ্ঞাগুলির সাথে সংঘর্ষ না করার অতিরিক্ত সুবিধা রয়েছে।


আমি E319: Sorry, the command is not available in this version: au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" Press ENTER or type command to continueলিনাক্স পুদিনা 17.3
নাসের

3
যদিও লক্ষ্যটি ইতিমধ্যে সংজ্ঞায়িত সিনট্যাক্স সংজ্ঞাগুলির সাথে সাংঘর্ষিক না বলে উল্লেখ করা হয়েছে , আপনি যদি এটি চান তবে containedin=ALLআপনি এটি তৈরি করে শেষ লাইনের শেষে যুক্ত করতে পারেন au BufReadPost * syntax match nonascii "[^\u0000-\u007F]" containedin=ALL। আমি এটির মূল্যবোধটি খুঁজে পাচ্ছি (যখন ইউনিকোডের অনুমতি দেওয়া হয়েছে), এখানে আসল উত্তরটি কোনও বিবৃতিতে অ- if
এসিআই

1
autocmd BufRead ....
ভিএম

6

এই রেজেক্স পাশাপাশি কাজ করে। এটি briceolion.com থেকে " ভিম রিমুভাল নন- এসসিআই অক্ষরগুলি" র জন্য প্রথম Google হিট এবং এর সাথে :set hlsearchহাইলাইট করবে:

/[^[:alnum:][:punct:][:space:]]/

1
প্রশ্নটি অ-এস্কি অক্ষরগুলি মুছে ফেলা নয় , হাইলাইট করতে বলছে ।
চতুসু

1
এটি নির্দেশ করার জন্য ধন্যবাদ, আমি আমার উত্তরটি সম্পাদনা করেছি। এটি দেখতে খুব বেশি কিছু ছিল না যে এই রেজেক্সও এমন প্রশ্নের উত্তর দেয় যা অন্য উত্তরগুলির চেয়ে পৃথক। আমার মূল উত্তরটি ছিল :%s/[^[:alnum:][:punct:][:space:]]//gcযা প্রথমে হাইলাইট করে, তারপরে প্রতিস্থাপন করে।
অনুদান বোম্যান

4

আপনি যদি মুদ্রণযোগ্য অক্ষরগুলিতেও আগ্রহী হন তবে এটি ব্যবহার করুন:/[^\x00-\xff]/

আমি এটি একটি ফাংশনে ব্যবহার করি:

 function! NonPrintable()
   setlocal enc=utf8
   if search('[^\x00-\xff]') != 0
     call matchadd('Error', '[^\x00-\xff]')
     echo 'Non printable characters in text'
   else
     setlocal enc=latin1
     echo 'All characters are printable'
   endif
 endfunction

আপনার ফাংশন এখানে কাজ করে না, এটি হাইলাইট করে না এবং এটি এনকোডিংকেও গোলমাল করে। আপনি কেন স্থানীয় এনকোডিং পরিবর্তন করছেন?
ওয়ার্নার

পরিবর্তন encকরার চেষ্টা করুন fenc। আমি এনকোডিংটি পরিবর্তন করেছি কারণ আমার ডিফল্ট এনকোডিংটি ছিল (2013 সালে) লাতিন 1। অক্ষরটি ল্যাটিন 1 হলে ফাংশনটি মুদ্রণযোগ্য অক্ষরগুলিকে হাইলাইট করে না। হাইলাইটিং দেখতে খুব ERRORআপনার রঙিন সিনট্যাক্স ফাইলটিতে কী থাকতে হবে। এই খনিhi Error guifg=Black guibg=Orange
পুনরায় লোকজনে সজ্জিত করা

2

আমি পেয়েছিলাম এই বিষয়ে এবং উত্তর অন্যান্য উত্তর উপর ভিত্তি করে এখানে আমি আমার এই জুড়েছেন .vimrc, যাতে আমি অ ASCII টাইপ করে হাইলাইট নিয়ন্ত্রণ করতে পারেন <C-w>1। এটি মন্তব্যের অভ্যন্তরেও দেখায়, যদিও আপনার ব্যবহৃত প্রতিটি ফাইল সিনট্যাক্সের জন্য আপনাকে মন্তব্য গ্রুপ যুক্ত করতে হবে। এটি হ'ল যদি আপনি একটি zsh ফাইল সম্পাদনা করেন তবে zshCommentআপনাকে লাইনে যুক্ত করতে হবে

au BufReadPost * syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment

অন্যথায় এটি অ-এসকিআই চরিত্রটি প্রদর্শন করবে না (আপনি যদি সমস্ত গোষ্ঠীতে অ-এস্কি অক্ষরগুলি দেখানোর বিষয়ে নিশ্চিত হতে চান তবে আপনি অন্তর্ভুক্ত = সমস্ত সেট করতে পারেন)। মন্তব্যটি কীভাবে আলাদা ফাইল টাইপ করা হয় তা পরীক্ষা করতে পছন্দসই টাইপের একটি ফাইল খুলুন এবং :syভিমে প্রবেশ করুন, তারপরে মন্তব্যের জন্য সিনট্যাক্স আইটেমগুলি অনুসন্ধান করুন।

function HighlightNonAsciiOff()
  echom "Setting non-ascii highlight off"
  syn clear nonascii
  let g:is_non_ascii_on=0
  augroup HighlightUnicode
  autocmd!
  augroup end
endfunction

function HighlightNonAsciiOn()
  echom "Setting non-ascii highlight on"
  augroup HighlightUnicode
  autocmd!
  autocmd ColorScheme *
        \ syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment,pythonComment |
        \ highlight nonascii cterm=underline ctermfg=red ctermbg=none term=underline
  augroup end
  silent doautocmd HighlightUnicode ColorScheme
  let g:is_non_ascii_on=1
endfunction

function ToggleHighlightNonascii()
  if g:is_non_ascii_on == 1
    call HighlightNonAsciiOff()
  else
    call HighlightNonAsciiOn()
  endif
endfunction

silent! call HighlightNonAsciiOn()
nnoremap <C-w>1 :call ToggleHighlightNonascii()<CR>

1

উপরের উত্তরগুলির কোনওোটাই আমার পক্ষে কাজ করেনি।

সুতরাং আমি ব্যবহার :1,$ s/[^0-9a-zA-Z,-_\.]//g

এটি আমার আগ্রহী বেশিরভাগ চরিত্রকে রাখে।


1
এটি অক্ষরগুলি মুছে দেয়, যেখানে বিকল্পটি হাইলাইট করার জন্য বলেছিল ।
বার্নহার্ড ওয়াগনার

আপনি কি বোঝাতে চাইছেন না [^ 0-9a-zA-Z, \ -_ \।], অর্থাৎ \ -?
ben26941

0

কেউ ইতিমধ্যে প্রশ্নের উত্তর দিয়েছেন। যাইহোক, অন্যদের জন্য যে এখনও সমস্যা রয়েছে তাদের জন্য, মন্তব্যগুলিতে (বা বিষয়টিতে কোনও সিনট্যাক্স গোষ্ঠী) অ-এস্কি অক্ষর হাইলাইট করার আরও একটি সমাধান এখানে solution এটি সেরা নয়, তবে এটি একটি অস্থায়ী সমাধান।

কেউ চেষ্টা করতে পারে:

:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
            \ highlight nonascii ctermfg=yellow guifg=yellow

এটিতে অন্যান্য সমাধান থেকে মিশ্রিত অংশ রয়েছে। আপনি মুছে ফেলতে পারেন contained, তবে, ডকুমেন্টেশন থেকে নিজের পুনরুক্তার সম্ভাব্য সমস্যা হতে পারে (যেমন আমি বুঝতে পারি)। অন্যান্য সংজ্ঞায়িত নিদর্শনগুলি দেখতে syn-containsবিভাগটিতে এটি অন্তর্ভুক্ত থাকবে।

:help syn-containedin
:help syn-contains 

থেকে অনুলিপি করা সমস্যা: আইটেমটি ভিএম-তে উচ্চ হাইলাইট অগ্রাধিকারে সেট করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.