मैं विम में कमांड को पास करने के लिए वर्तमान फ़ाइल के पूर्ण पथ का विस्तार कैसे कर सकता हूं?


123

जब मैं कमांड मोड में जाता हूं और टाइप करता हूं

:!mycommand %

मुझे वर्तमान फ़ाइल पर मेरी कमांड निष्पादित होती है ( %इसे वर्तमान फ़ाइल नाम में विस्तारित किया जाता है)। क्या एक समान निर्माण है जो पूर्ण फ़ाइल नाम (पूर्ण पथ के साथ) का विस्तार करता है?

मैं विंडोज का इस्तेमाल कर रहा हूं।



:! mycommand "%"
SdidS

जवाबों:


161

:!mycommand %:p

सम्बंधित:

:!cd %:p:h


23
VIM की सहायता में आप इनको कैसे खोजते हैं?
केफ्लेविच

57
@keflavich:help filename-modifiers
बैकस्ट्रॉम

निर्देशिका प्राप्त करने के लिए जिसमें वर्तमान फ़ाइल है, मुझे लगता है कि%: h पर्याप्त है। यहां%: p: h की आवश्यकता क्यों है?
HVNSweeting

1
@HVNSweeting :%pसापेक्ष पथ के बजाय फ़ाइल का पूर्ण पथ है। :%p%hफ़ाइल के मूल निर्देशिका के लिए पूर्ण पथ है। बस का उपयोग करने के %:hपरिणामस्वरूप एक रिश्तेदार पथ हो सकता है।
अन्निका बैकस्ट्रॉम

2
@HVNSweeting शैल:, cd ~ ; vim .vimrcVim:, :!echo %:hको प्रदर्शित करना चाहिए। ' रिश्तेदार पथ के लिए।
अन्निका बैकस्ट्रॉम

65

अन्य दो उत्तर मेरे लिए (किसी कारण से) काम नहीं आए। हालाँकि, मैंने पाया कि सामान्य मोड में टाइप करने पर यह कॉम्बो पूर्ण पथ प्रदर्शित करता है:

1फिर दबाएंCtrlG

स्रोत: विम टिप्स विकी पर " वर्तमान फ़ाइल का नाम प्राप्त करें "। का {count}CTRL-Gअनुभाग भी देखें :help CTRL-G


5
वह एक अलग विषय है। प्रश्न एक कमांड स्ट्रिंग (इस प्रकार अग्रणी :!) में बफर पथ को शामिल करने के बारे में है । आपका {count}CTRL-Gअनुक्रम UI में पूर्ण पथ प्रदर्शित करने के लिए है।
स्टीफन माज्यूस्की

3
@StefanMajewsky प्रश्न शीर्षक के बारे में जो वास्तव में मुझे यहाँ लाया था, यह चुना हुआ उत्तर होना चाहिए।
doc_id


9

वर्तमान विम फ़ाइल का प्रिंट आउट लेने के लिए:

:help expand
:echo expand("%:p")    " absolute path
:echo expand("%:p:h")  " absolute path dirname
:echo expand("%:p:h:h")" absolute path dirname dirname
:echo expand("%:.")    " relative path
:echo expand("%:.:h")  " relative path dirname
:echo expand("%:.:h:h")" relative path dirname dirname

:echo expand("<sfile>:p")  " absolute path to [this] vimscript

:help filename-modifiers

उदाहरण के लिए (एक विम फ़ंक्शन के साथ), resolve()और expand()किसी भी सहानुभूति को वर्तमान स्क्रिप्ट के लिए पूर्ण पथ के लिए<sfile>:p (बजाय %:p), और फिर execकरने के लिए एड फ़ाइल नाम एक समारोह स्थानीय vim चर में निहित :sourcefnameescapel:vimrcfilename

 "  g:__sfile__dirname     -- directory containing this vimrc script
 "                            after symlinks
 "                            ~dirname(abspath(realpath(__file__)))
 let g:__sfile__dirname=fnamemodify(resolve(expand("<sfile>:p")), ":h")

 "  Source_dotvim(filename)  -- source dirname(this_vimrc)/filename
 function Source_dotvim(filename)
     let l:vimrcfilename=g:__sfile__dirname . "/" . a:filename
     if filereadable(l:vimrcfilename) && !empty(l:vimrcfilename)
         "source s:vimrcfilename "this doesn't work, so exec:
         exec "source " . fnameescape(l:vimrcfilename)
     else
         echo l:vimrcfilename . " empty or not found."
     endif
 endfunction 

 call Source_dotvim("vimrc.local.01-env.vimrc")

टिप्पणियाँ:

संदर्भ



0

यदि आप अपने में पूर्ण पथ का उपयोग करना चाहते हैं vimrc, तो आप इस तरह से कुछ का उपयोग कर सकते हैं:

let vimFiles = '$HOME/.vim'
let absPath  = expand(vimFiles . '/subDir')

यह आपको विंडोज पर बैकस्लैश के साथ एक रास्ता देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.