উইঙ্কের বর্তমান বাফারের ইঙ্ক ফাইলের নাম / পথ


187

বর্তমান বাফারটি ধরে নেওয়া হ'ল সম্পাদনা করার জন্য একটি ফাইল খোলা আছে :e থাকে হয় না E32: No file name

আমি এক বা সমস্তকে ইয়েঙ্ক করতে চাই:

  • স্থিতি রেখায় ঠিক যেমন ফাইলের নাম প্রদর্শিত হয়, যেমন ~\myfile.txt
  • ফাইলের সম্পূর্ণ পথ, যেমন c:\foo\bar\myfile.txt
  • কেবলমাত্র ফাইলের নাম, যেমন myfile.txt


উত্তর:


207

টি এল; ডিআর

:let @" = expand("%")>

এটি ফাইলটি নামবিহীন নিবন্ধে অনুলিপি করবে , তারপরে আপনি এটি আটকে দিতে ভাল পুরানো ব্যবহার করতে পারেন p। এবং অবশ্যই আপনি দ্রুত ব্যবহারের জন্য একটি কীতে এটি মানচিত্র করতে পারেন।

:nmap cp :let @" = expand("%")<cr>

আপনি এটি পুরো পথের জন্যও ব্যবহার করতে পারেন

:let @" = expand("%:p")

ব্যাখ্যা

ভিম নামবিহীন রেজিস্টার ব্যবহার করে মুছে ফেলা বা অনুলিপি করা হয়েছে এমন কপিরাইট (ইয়াঙ্কড) সংরক্ষণ জন্য , একইভাবে আপনি যখন এটি আটকান তখন এই রেজিস্টার থেকে পাঠ্যটি পড়ে।

ব্যবহার করে letআমরা ম্যানুয়ালি ব্যবহার করে নিবন্ধটিতে পাঠ্য সংরক্ষণ করতে পারি:let @" = "text" করতে পারি তবে আমরা একটি অভিব্যক্তির ফলাফলও সঞ্চয় করতে পারি।

উপরের উদাহরণে আমরা ফাংশনটি ব্যবহার করি expandযা ওয়াইল্ডকার্ড এবং কীওয়ার্ডগুলি প্রসারিত করে। আমাদের উদাহরণে আমরা expand('%')বর্তমান ফাইলের নামটি প্রসারিত করতে ব্যবহার করি । আমরা এটি হিসাবে সংশোধন করতে পারেনexpand('%:p')সম্পূর্ণ ফাইলের নাম ।

দেখুন :help let :help expand :help registersবিস্তারিত জানার জন্য


23
শীতল এটি কেবল আমার ভিএমআরসি-তে যুক্ত করেছে: নোরম্যাপ <সাইলেন্ট> <F4>: চলুন @ + = প্রসারিত করুন ("%: পি") <সিআর>
থিপোসেই

9
উইন্ডোজে, পরিবর্তে আপনার ব্যবহার করা উচিত: আপনি যদি উইন্ডোজ ক্লিপবোর্ডে থাকতে চান তবে @ * = = প্রসারিত করুন ("%") ।
কেএফএল

15
আপনি যদি unnamedplusআপনার ক্লিপবোর্ড ব্যবহার হিসাবে ব্যবহার করছেনlet @+ = expand("%")
কেভিন কক্স

4
"%:h"ফাইলের নাম ছাড়াই পুরো পাথ পেতে ব্যবহার করুন ।
পলিমরফিক্স

সম্পর্কিত বিশেষ করে যদি আপনি ফাইলের নাম ছাড়া ডিরেক্টরি প্রয়োজন - stackoverflow.com/a/2233924/1882064
arcseldon

94

প্রায় আপনি যা চাইছেন, এবং এটি করতে পারে: Ctrl+R % আপনি যেখানে আছেন সেখানে বর্তমান ফাইলের নাম টানুন (কমান্ড প্রম্পট, বাফার সম্পাদনা করুন ...)। আরও জন্য এই Vim টিপ দেখুন।


1
আপনি যখন সম্পাদনা মোড থেকে প্রস্থান করবেন তখন আপনি ফাইলটির নাম যুক্ত করতে পারেন: ctrl- "ctrl-% p
stefanB

13
Ctrl+R %insertমোডে থাকাকালীন কাজ করে - তবে editমোডে, এর Ctrl+Rঅর্থ আবার করা।
কেভিন প্যাঙ্কো

3
কি stefanB বোঝানো "স্বাভাবিক / কমান্ড মোডের জন্য% পি ছিল হিসাবে একই <কোটি>% সন্নিবেশ / cmdline-
graywh

কেবল পুনরায় সংক্ষিপ্ত বিবরণ দিতে বা পৃথকভাবে জানাতে: ধূসর এবং dwc উভয়ের জন্য উত্তরগুলি "রেজিস্টার% থেকে পেস্ট করুন"। একটি এটি সন্নিবেশ মোডের জন্য করে, অন্যটি সাধারণ মোডের জন্য। ম্যাকভিমে এটি% রেজিস্টারে ওভাররাইট করা যায় না বলে মনে হয়।
এরিক হু

পট্টবস্ত্র পেতে একই সরল আদেশ আছে? ) সমাধানের জন্য
THX

71

আপনি যদি আপনার সিস্টেম-স্তরের ক্লিপবোর্ডে বর্তমান বাফার ফাইলের নামটি রাখতে চান তবে নিবন্ধটিকে @ + এ পরিবর্তন করার চেষ্টা করুন:

" relative path
:let @+ = expand("%")

" full path
:let @+ = expand("%:p")

" just filename
:let @+ = expand("%:t")

20140421 সম্পাদনা করুন: আমি সাধারণত এগুলি ব্যবহার করি, তাই আমি কিছু শর্টকাট তৈরি করেছি। লিনাক্স ভিমস দৃশ্যত ম্যাক ভিমসের চেয়ে কিছুটা ভিন্নভাবে কাজ করে , তাই এর জন্য একটি বিশেষ কেসও রয়েছে। আপনি যদি নিম্নলিখিতটি রাখেন আপনার ~/.vimrc:

" copy current file name (relative/absolute) to system clipboard
if has("mac") || has("gui_macvim") || has("gui_mac")
  " relative path  (src/foo.txt)
  nnoremap <leader>cf :let @*=expand("%")<CR>

  " absolute path  (/something/src/foo.txt)
  nnoremap <leader>cF :let @*=expand("%:p")<CR>

  " filename       (foo.txt)
  nnoremap <leader>ct :let @*=expand("%:t")<CR>

  " directory name (/something/src)
  nnoremap <leader>ch :let @*=expand("%:p:h")<CR>
endif

" copy current file name (relative/absolute) to system clipboard (Linux version)
if has("gui_gtk") || has("gui_gtk2") || has("gui_gnome") || has("unix")
  " relative path (src/foo.txt)
  nnoremap <leader>cf :let @+=expand("%")<CR>

  " absolute path (/something/src/foo.txt)
  nnoremap <leader>cF :let @+=expand("%:p")<CR>

  " filename (foo.txt)
  nnoremap <leader>ct :let @+=expand("%:t")<CR>

  " directory name (/something/src)
  nnoremap <leader>ch :let @+=expand("%:p:h")<CR>
endif

তারপরে উদাহরণস্বরূপ <leader>cfবর্তমান বাফারের আপেক্ষিক পাথ অনুলিপি করবেন (ডিফল্ট লিডার ব্যাকস্ল্যাশ হয় (\ ))। আমি প্রায়শই এগুলি কোনও ফাইলের কমান্ড চালানোর জন্য বা কমান্ড লাইনে অন্য কিছু করার জন্য ব্যবহার করি। আমি প্রায়শই শেষ ফাইল নাম / ডিরেক্টরি নাম ব্যবহার করি না।

আপনি আরও স্বজ্ঞাত ম্যাপিংগুলি সম্পর্কিত হিসাবে সম্পর্কিত হিসাবে বিবেচনা করতে পারেন <leader>cfr, <leader>cfaনিখুঁত <leader>cffজন্য, কেবল ফাইলের নাম <leader>cfdজন্য, ডিরেক্টরিতে for


2
উইন্ডোজ এবং ম্যাকের জন্য "*এবং "+সমতুল্য, যাতে আপনি প্ল্যাটফর্ম চেকগুলি সরবরাহ করতে পারেন এবং কেবল ব্যবহার করতে পারেন@+
গ্যাবে মোথার্ট

1
অদ্ভুতভাবে এটি কোনও উইমস্ক্রিপ্ট ফাংশনে কাজ করবে বলে মনে হচ্ছে না: "প্রতিধ্বনি বুফনাম ('%: p')" ফাঁকা, তবে আপনি এটি দীর্ঘতর "fnamemodify (bufname ('%')), ': p' দিয়ে ঠিক করতে পারেন ) "
ডেভিড লাজং ম্যাডিসন স্টেলার

6

আপনি যদি তা :regকরেন তবে %রেজিস্টারে বর্তমান ফাইলটির নাম দেখতে পাবেন । আপনি এটি দিয়ে পেস্ট করতে পারেন"%pউদাহরণস্বরূপ ।

যদি, আমার মতো আপনিও প্রায়শই 'বিকল্প' বাফারে স্যুইচ করেন তবে এটি খুব কার্যকর যে এর সম্পূর্ণ পাথ এবং ফাইল নামটি #রেজিস্টারে রাখা হয়েছে। "#pউদাহরণস্বরূপ আপনি এটি দিয়ে পেস্ট করতে পারেন ।

দ্রষ্টব্য (কেবলমাত্র এটির ক্ষেত্রে আমার সেটআপের সাথে সম্পর্কিত আচরণটি সুনির্দিষ্ট হয়): আমি উবুন্টু 14.04.4 এলটিএস-তে ভিআইএম 7.4.52 ব্যবহার করছি।


4

অন্যান্য কয়েকটি উত্তরের তথ্যের সংমিশ্রণ: আপনি যদি কোনও ফাইলের বর্তমান পুরো পথটি ইয়েঙ্ক করতে চান এবং এটি অন্য উইন্ডোতে কমান্ড বাফারটিতে রাখতে চান :let @" = expand("%:p")তবে প্রথমে করুন , তারপরে অন্য উইন্ডোতে যান এবং টাইপ করুনCtrl+R "

একই ডিরেক্টরিতে থাকতে এবং পুরানোটি খোলা রাখার সময় কোনও ফাইল অনুলিপি করার জন্য দরকারী। উদাহরণ স্বরূপ:

শুরু করুন : src / com / beatatkin / পেইন্ট / আকার / সার্কেল.জাভা সম্পাদনা করা হচ্ছে

  1. প্রকার :let @" = expand("%:p") (পাথটি মূল ক্লিপবোর্ড বাফারে জ্যাঙ্ক হয়ে যায় gets)

  2. এর সাথে একটি নতুন উইন্ডো খুলুন :sp

  3. আদর্শ :e Ctrl+R"

  4. চেনাশোনাতে ফিরে যেতে এবং স্কোয়ারে পরিবর্তন করতে তীর কীগুলি ব্যবহার করুন এবং <CR> টিপুন

সমাপ্তি : src / com / beatatkin / পেইন্ট / আকার / স্কয়ার.জাভা সম্পাদনা করা হচ্ছে


1

এখানে আমার সমাধান:

" filename / dirname of the current file {{{
    " copy result to the system clipboard and echo the result
    " the cb> prompt means the clipboard
    " *f*ile *n*ame, ex. init.vim
    map <Leader>fn :let @+ = expand("%:t") \| echo 'cb> ' . @+<CR>
    " *f*ile *p*ath, ex. /home/user/nvim/init.vim
    map <Leader>fp :let @+ = expand("%:p") \| echo 'cb> ' . @+<CR>
    " *d*irectory *p*ath, ex. /home/user/nvim
    map <Leader>dp :let @+ = expand("%:p:h") \| echo 'cb> ' . @+<CR>
    " *d*irectory *n*ame, ex. nvim
    map <Leader>dn :let @+ = expand("%:p:h:t") \| echo 'cb> ' . @+<CR>
" }}}

-1

আমি এক্স ক্লিপবোর্ড অ্যাক্সেস করতে এক্সক্লিপ ব্যবহার করি, তাই আমি ব্যবহার করি:

nmap <localleader>d :call system("xclip -i -selection clipboard", expand("%:p"))<CR>

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