Псевдоним поиска файлов по имени и откройте их в vim

У меня уже есть псевдоним для (более) быстрого поиска файлов:

alias f='find . -iname'

Я использую его как таковой:

$ f *statis*
./main/statistics.py
./test/test_statistics.py

Теперь, я хотел бы иметь еще один псевдоним, который выполняет тот же поиск, но вместо того, чтобы распечатывать найденные файлы, откроет их в vim. В идеале это срабатывало при обнаружении нескольких файлов.

Я попробовал (используя «echo» вместо «vim» для целей отладки):

 alias fvi='find . -exec echo {} + -iname'

... но это кажется, что -exec отменяет -iname, следующего за ним:

$ fvi *statis*
 ./main/statistics.py ./main/probability.py ./test/test_statistics.py 
 ./test/test_probability.py
1
задан 7 September 2015 в 11:52

2 ответа

... или использовать грязный взломать псевдоним, как если бы он принимал параметры ...

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

Не происходит замены параметров. Если вам нужна подстановка параметров, определите функцию вместо псевдонима. Это так же много нажатий клавиш:

fvi () { find . -iname "$1" -exec vi {} + ; }

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

alias fvi='find . -iname "$(history|tail -n1|sed -e "s/^.*\sfvi\s*//")" -exec vi {} + #'

Результат работы подголовника history | tail -n1 | sed -e "s/.*\sfvi\s*//" - все, что следует fvi. Это будет связано с командой find . -iname HERE -exec vi {} +, которая вам нужна.

За исключением того, что в конце определения псевдонима есть этот хеш-знак. Я оставляю его читателю, чтобы выяснить его смысл существования, за улыбку, которая раскрывает полный хак. -

)
3
ответ дан 23 May 2018 в 17:40

Если вам действительно нужен псевдоним, вы можете использовать этот ответ.

Псевдоним в bash не принимает параметры. Поэтому вам нужна функция и псевдоним и слегка измененная команда find:

Измените .bashrc
nano ~/.bashrc
и добавьте строки ниже в конце файла
myfvi() {
    find . -type f -iname "$1" -exec vi -o {} +
}
alias fvi=myfvi
Перезагрузите конфигурацию или logout и re-login
source ~./bashrc
Начать с
fvi '*statis*'
Но вы также можете использовать функцию непосредственно
myfvi '*statis*'

really

У меня есть три файла в моей папке

$ ls -laog
total 4288
drwxrwxr-x  2 4329472 Sep  7 11:43 .
drwx------ 67   20480 Sep  7 11:28 ..
-rw-rw-r--  1       0 Sep  7 11:43 bar
-rw-rw-r--  1       4 Sep  7 11:23 foo
-rw-rw-r--  1       4 Sep  7 11:23 foobar

И когда я использую псевдоним

fvi 'foo*'

, vi открывается двумя файлами.

[d19 ]

1
ответ дан 23 May 2018 в 17:40
  • 1
    Я не считаю псевдоним даже необходимым. Пользователь должен иметь возможность напрямую вызывать функцию – Sergiy Kolodyazhnyy 7 September 2015 в 12:51
  • 2
    @Serg Конечно, но ОП попросил псевдоним. – A.B. 7 September 2015 в 12:51
  • 3
    Но почему бы не вызвать функцию оболочки fvi? Я не вижу смысла. – zwets 7 September 2015 в 13:36
  • 4
    @zwets Нет, но у вас есть мой +1 =) – A.B. 7 September 2015 в 14:40
  • 5
    Это то, о чем попросил ОП! : D – Fabby 8 September 2015 в 00:40

Другие вопросы по тегам:

Похожие вопросы: