Skip to main content

How to Open a File in Vim Editor without Navigating through all the nested Directories

                     One day I was working on something and I needed to modify the configuration file on the server. So I had to navigate to all the way through nested directories and then finally edit the file. The requirement was quite frequent and every time I had to navigate to multiple directories. This post is about to simplify the above task.


For example, We need to edit the following file.
File path : /home/alex/Softwares/apache-tomcat-7.0.62/webapps/live-service/WEB-INF/classes/conf/database/database.conf
We can do it by using the below command:
alex:~$ vim /home/alex/Softwares/apache-tomcat-7.0.62/webapps/live-service/WEB-INF/classes/conf/database/database.conf If we count the nested directories, There are 10 directories We need to navigate through and It is cumbersome even we know the exact path of the file.

We will try to do something which can reduce the effort of navigating to nested directories. eg.
The below command will work as above vim command.
alex:~$ svim database.conf


Basically, We need to make an alias for vim command which works upon command line argument. As we know most of the shell does not support aliases with the argument, So we can use the following function to create an alias svim for the vim editor.
function svim() {
 if [ $# -eq 0 ]
  then
   echo 'Please provide substring of the file path in the argument!';
  else
   FPS="$(find . -name \* | grep $1)"
   c=0
   for fp in $FPS;
   do
    if [ $c -eq 1 ]
    then
    ((c=c+1));
    break;
    fi 
    ((c=c+1));
   done

   if [ $c -eq 0 ]
   then
    echo "No File Found for the path containing substring : $1"
   elif [ $c -eq 1 ]
   then 
    if [ $# -gt 1 ]
    then 
     vim +/$2 $FPS
    else
      vim $FPS
    fi
   else
    echo "Multiple Files Found for the path containing substring : $1"
    echo "Do you want to display all the files : Press 'd'"
    read -rsn1 ui
    if [[ $ui = 'd' ]]
    then
    for j in $FPS;
                                do
                                        echo $j
                                done

    fi
   fi 
 fi
}
Copy the above function and paste into the .bashrc file. Now close the terminal and reopen it or We can use source command to reload the .bashrc

Ok! If everything done correctly and type the below command.
alex:~$ svim database.conf
It will open the file /home/alex/Softwares/apache-tomcat-7.0.62/webapps/live-service/WEB-INF/classes/conf/database/database.conf

We can do even more by using this function.
  1. We can use substring from the file path instead of full file name. Like
    alex:~$ svim database.co
  2. Provide a pattern in the argument which can be used as the default position of the cursor when the file got opened. Like
    alex:~$ svim database.conf text It will open the file and cursor will be at first occurrence of the pattern text

Note: -We can use locate command instead of find for the faster execution but find is more universal and standard.
If you don't have permission to modify the .bashrc file you can use the following command.
alex:~$ vim $(find . -name \* | grep filename)

Comments

Popular posts from this blog

java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager

If you are trying to get started with Janus Graph with Apache Cassandra. You may get the following error. Caused by: org.janusgraph.diskstorage.TemporaryBackendException: Temporary failure in storage backend at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:219) ~[janusgraph-cassandra-0.2.0.jar:na] at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.<init>(CassandraThriftStoreManager.java:198) ~[janusgraph-cassandra-0.2.0.jar:na] ... 48 common frames omitted Caused by: org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused (Connection refused) at org.apache.thrift.transport.TSocket.open(TSocket.java:187) ~[libthrift-0.9.2.jar:0.9.2] at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81) ~[libthrift-0.9.2.jar:0.9.2] at org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeR...

com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server

If you are trying to connect Mongo DB Server and it insanely throwing following error. com.mongodb.MongoTimeoutException : Timed out after 1000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=192.168.1.10:27010, type=UNKNOWN, state=CONNECTING, exception={ com.mongodb.MongoSecurityException: Exception authenticating MongoCredential {mechanism=null, userName='user123', source='admin', password=<hidden>, mechanismProperties={}}}, caused by {com.mongodb.MongoCommandException: Command failed with error 18 : 'Authentication failed.' on server 192.168.1.10:27010 . The full response is { "ok" : 0.0, "code" : 18, "errmsg" : "Authentication failed." }}}] If you start looking the error content First you encounter with Timeout Exception which may mislead you. It is basically an authentication error. I...

Move like a Ninja on Terminal Console

If you are in IT and do a lot of stuff on terminal, this is the post for you. In the following post, we will explore various key shortcuts to jump and edit on console. Note:- Short keys may behave differnt on differnt OS systems. These keys best work with Linux sytem, For mac OS you have to enable Option key as Meta key in case of Alt . I have never checked these on windows, Please share your experinece with windows in comments. ------------------------------------------------------------------ Edit Control Move forward one char: Ctrl + f Move backward one char: Ctrl + b Move forward one word: Alt + f Move backward one word: Alt + b Move to end: Ctrl + e #Like End Move to start: Ctrl + a #Like Home Jump toggle between current location and start: Ctrl + xx Delete forward one char: Ctrl + d #Like Delete Delete backward one char: Ctrl + h #Like Backspace Delete forward one word: Alt + d Delete backward one word: Ctrl + w Delete to end: Ctrl + k Delete to start: Ctrl + u Undo: Ct...