7

При работе над приложением rails мне нравится открывать все мои файлы через командную строку, вот так

CD my_app
gedit app/views/user/show.HTML.erb

Есть ли способ, которым я мог бы сократить это так, чтобы я мог просто написать что-то вроде

gedit  user_views/show.HTML.erb

?

Я хотел бы, чтобы консоль оставалась в главном каталоге, мне просто не нравится вводить app/controller/user_controler.rb каждый раз, когда я хочу открыть пользовательский контроллер. Я знаю, что могу просто открыть файл с помощью мыши, но чувствую, что переход с клавиатуры на мышь немного нарушает мой фокус. Когда я могу просто нажать на клавиатуру, мне кажется, что у меня более плавный рабочий процесс.

7 ответов7

3

Возможно создать символическую ссылку из главного каталога.

ln -s app/views/user/ user_views

создаст символическую ссылку в вашем основном / рабочем каталоге, которая обновит файлы в app / views / user. так что ls -l покажет что-то вроде:

user_views -> app/views/user/

таким образом, вы могли бы просто пойти

$ gedit user_views/show.html.erb

Также вы можете рассмотреть возможность установки переменной

лайк

$ VIEWS='app/views/user/'

который позволил бы вам пойти

$ gedit $VIEWS/show.html.erb

Вы можете добавить это в свой профиль bash, чтобы его не нужно было переустанавливать каждый раз.

больше на символических ссылках

подробнее о профиле bash и настройке переменной среды.

РЕДАКТИРОВАТЬ

По дороге домой я удивлялся, почему кто-то хочет, чтобы символическая ссылка просто прыгнула на один режиссёр?

/apps/views/use

в этом случае взгляды реж. Знаете ли вы, что будет делать вкладка?

Я помню, что мне понадобилось несколько месяцев, чтобы выучить этот удобный трюк.

Введите что-то вроде следующего и нажмите вкладку

$ gedit a

нажмите вкладку, и она, вероятно, завершит приложение, оставив вас с

$ gedit app/

наберите v и снова нажмите Tab, скорее всего, вы получите

$gedit app/views/

дважды нажмите вкладку, чтобы перечислить все возможные варианты. Это работает как с утилитами, так и с dir и файлами.

Typing

$ ged

и нажав вкладку завершит Gedit. Это должно немного ускорить вас.

2

Не знаю, поможет ли это, но есть очень редко используемая переменная оболочки, называемая CDPATH . CDPATH очень похож на PATH для команд. Когда вы делаете cd , он ищет CDPATH для каталогов, которые соответствуют вашему CDPATH .

Например:

CDPATH=.:/usr/local:$HOME/projects

Если бы я сделал:

cd jiff/source

Команда CD будет искать ./jiff/source , затем каталог /usr/local/jiff/source , а затем $HONE/projects/jiff/source . Если есть каталог $HOME/projects/jiff/source , каталог изменится на него.

Это не решит вашу проблему, когда вы можете просто ввести частичный путь и выполнить команду, но вы можете сказать, добавить myapp/app/view в переменную окружения CDPATH и сделать это:

$ cd user
$ gedit show.html.erb

Другая вещь, которую вы можете сделать, это присвоить команде gedit псевдоним _gedit , а затем написать быстрый сценарий оболочки, чтобы получить "имя файла", найти дерево каталогов, которое соответствует введенному вами, и затем отредактировать файл. Это то, что пользователи Kornshell делают, чтобы получить эквивалент PS1=\u@\h:\w PS-запроса, который есть у вас, пользователей BASH. Добавьте что-то вроде этого в ваш файл .bashrc :

alias _gedit=gedit

function gedit {
    fileName=$(basename $0)
    dirName=$(dirname $0)
    for directory in app/controller my_app/app/view
    do
       if [[ -d "$directory/$dirName" ]]
       then
           $directory/$0
           break
       fi
   done
}

Теперь, если вы набрали gedit user_controler.rb , и есть файл app/controler/user_controler.rb , он отредактирует app/controller/user_controler.rb

2

Взгляните на « Эффективную навигацию по каталогам в Unix», которая содержит некоторые полезные функции Bash и псевдонимы.

1

Если у вас есть уникальные имена файлов, вы можете просто сделать

gedit $(find -name show.html.erb)

По умолчанию поиск будет выполнять поиск в текущем каталоге, а $() эквивалентен обратным галочкам, за исключением того, что обратные пометки являются устаревшей функцией оболочки в большинстве современных оболочек. ;)

Вы можете, конечно, сократить это еще больше с помощью сценария оболочки в соответствии с

#!/bin/sh
gedit $( find -name "$1" )

И вы можете заменить -name на -iname, чтобы избавить вас от необходимости использовать клавишу Shift, если у вас есть имена файлов в верхнем регистре.

Я не уверен, как gedit ведет себя с несколькими аргументами (если у вас нет полностью уникальных имен файлов), но с vim он будет просматривать файлы по одному. Таким образом, вы будете просто ":q", пока не дойдете до того, который хотите. Я бы ожидал, что Gedit откроет несколько вкладок, если у вас будет несколько имен. Но я не использую графические редакторы по той же причине, по которой вы не хотите использовать мышь, чтобы открыть файл. ;)

1

Вы рассматривали возможность использования переменных оболочки?

user@localhost $ USERVIEWS='app/views/user/'
user@localhost $ gedit $USERVIEWS/show.html.erb
0

Вы рассматривали GMate? Это набор плагинов для Gedit, которые значительно облегчают разработку Rails (помимо прочего), делая его похожим на Textmate. Это решает вашу проблему с плагином Fuzzy Open. Вы открываете каталог своего проекта в Gedit (я думаю, что с помощью плагина панели браузера файлов), а затем нажмите ctrl-shift-o, чтобы активировать FuzzyOpen. Затем начните вводить некоторые буквы нужного вам файла, и FuzzyOpen сопоставляет их с файлами и каталогами в вашем проекте. Например, если вы начали печатать:

viushowhe

он найдет все файлы, путь которых содержит эти буквы в таком порядке, например

app/VIews/USers/sHOW.Html.Erb

Эта же серия букв может также найти такие вещи, как:

Vendor/ImaplUgin/Stuff/SHOWmetHEmoney.rb etc.
0

У меня была связанная с этим потребность, прыгать в каталоги далеко. Я написал скрипт, который полагается, что имя каталога будет более или менее уникальным для работы:

#!/bin/bash
#
# usage: pcd NAME
#
# checks, whether the first locate-match is a directory, and jumps into it, if it is.
# If not, the first match is displayed. pcd: perhaps-cd. :)
#
function pcd 
{
    folder=$(locate $1 | egrep "$1$" | head -n 1)
    # echo $folder
    if [[ -d $folder ]]
    then 
        echo $folder
        cd $folder
    else 
    echo "No directory "$folder
    fi
}

Я взял его из .bashrc, чтобы использовать эту функцию.

Если locate не находит слишком много файлов для редактирования, оболочка может отобразить 30 или 40 совпадений в виде нумерованного списка и предложить вам ввести число от 0 до 30, 40, чтобы открыть этот файл, или вы можете использовать zenity для отобразить совпадения и позволить вам выбрать их.

Программа locate полагается на регулярный запуск updatedb. Он не будет работать для свежих новых файлов с сегодняшнего дня, но большинство редакторов имеют список недавно открытых файлов - не так ли?

Файл-диалог открытия может быть изменен, чтобы содержать часто используемые каталоги - потяните эти каталоги влево, список избранных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .