Wikia

Vim Tips Wiki

Changes: Replace selected shell command with full path when editing scripts

Edit

Back to page

(what is this tip trying to do?)
(Change <tt> to <code>, perhaps also minor tweak.)
 
Line 4: Line 4:
 
|previous=1107
 
|previous=1107
 
|next=1109
 
|next=1109
|created=January 16, 2006
+
|created=2006
 
|complexity=basic
 
|complexity=basic
 
|author=l1th10n
 
|author=l1th10n
Line 13: Line 13:
 
}}
 
}}
 
{{dodgy|What exactly does this have to do with Vim? Please give a detailed example of how to use this in Vim (including before and after text)}}
 
{{dodgy|What exactly does this have to do with Vim? Please give a detailed example of how to use this in Vim (including before and after text)}}
When writing bash scripts and sudoers files, it can be tedious to determine the paths of the commands. Here is a procedure to use the <tt>which</tt> command to return the path of the selected word:
+
When writing bash scripts and sudoers files, it can be tedious to determine the paths of the commands. Here is a procedure to use the <code>which</code> command to return the path of the selected word:
   
 
<pre>
 
<pre>
Line 44: Line 44:
 
On Windows, you will have to translate ';' (instead of ':') into ',', and replace 'cat' by 'cat.exe'.
 
On Windows, you will have to translate ';' (instead of ':') into ',', and replace 'cat' by 'cat.exe'.
   
These solutions will work even without 'which' installed on the system. The path translation mechanism is wrapped in <tt>:SearchInPATH</tt> from {{script|id=229}}.
+
These solutions will work even without 'which' installed on the system. The path translation mechanism is wrapped in <code>:SearchInPATH</code> from {{script|id=229}}.
   
 
----
 
----

Latest revision as of 06:07, July 13, 2012

Tip 1108 Printable Monobook Previous Next

created 2006 · complexity basic · author l1th10n · version 5.7


When writing bash scripts and sudoers files, it can be tedious to determine the paths of the commands. Here is a procedure to use the which command to return the path of the selected word:

!which $(cat)

To convert a bash command to a fully-explicit bash command, the key sequence would be "w!which $(cat)". $(cat) simply uses the selected text from the pipe and uses this text as an argument to the 'which' command. This method is great for using commands that use arguments instead of stdin. However, as far as I know, it works only in bash.

This command could be mapped to a key sequence if required.

CommentsEdit

For this to work with csh and tcsh you have to enclose the 'cat' command in backticks. So you have to use:

which `cat`

Also make sure your 'shellpipe' is set to "|& tee". See :help 'shellpipe'.

The backtick version also works with bash.


In fact, the $(cmd) notation is general for all bourne compatible shells. But as bourne and csh-like shells accept the `cmd` notation, it is more general (although I prefer $(cmd) when dealing with bourne shells for it is recursive).


This will also do the trick on Unix:

:echo globpath(substitute($PATH, ':', ',', 'g'), 'cat')

On Windows, you will have to translate ';' (instead of ':') into ',', and replace 'cat' by 'cat.exe'.

These solutions will work even without 'which' installed on the system. The path translation mechanism is wrapped in :SearchInPATH from script#229.


Simpler:

!xargs which

I'm missing the point of the $(cat) notation. What is this doing?

To just get the full path to a command, you can do

:.!which cat

This will insert the text "/usr/bin/cat" at the cursor.


I believe the $() notation passes the currently highlighted word (in visual mode) to the shell.


Around Wikia's network

Random Wiki