экземпляр энергии повторного использования от терминала Linux

Я написал запись в блоге об этом ( Исключения составляют элегантный код ), которая впоследствии была опубликована в Перегрузка . Я действительно написал это в ответ на то, что Джоэл сказал в подкасте StackOverflow!

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

Боль проверки кодов ошибок означает, что люди часто пренебрегают этим, делая их совершенно бессмысленными: по крайней мере, вы должны явно игнорировать исключения с помощью оператора catch.

Использование деструкторов в C ++ и диспозиторов в .NET для обеспечения правильного освобождения ресурсов при наличии исключений также может значительно упростить код. Чтобы получить тот же уровень защиты с помощью кодов ошибок, вам нужно либо много операторов if, много дублированного кода очистки, либо goto вызовов общего блока очистки в конце функции. Ни один из этих вариантов не приятен.

11
задан ϹοδεMεδιϲ 16 June 2009 в 12:07
поделиться

6 ответов

I have a couple suggestions for you, though neither is exactly what you're talking about. The first is NERD Tree, which gives you a nice tree-based file browser for opening other files. Very handy. I also set up a hot key (ctrl+o) to open NERD Tree for me. I keep an alias of whatever project I'm on in ~/curr/trunk, so this always works for me:

map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>

The other thing that I would suggest is to do away with ctrl+z. It's somewhat clunky, and everyone I know who uses that method tends to get lost and end up with 3 or 4 vim's running in the background. Take a look at how to open a shell for yourself. I use a map for ;s to execute a shell script:

map ;s :!~/.vim/shell.sh<CR>

Which executes:

#!/bin/sh
/usr/local/bin/bash -l;

I also have a bit of magic in my .profile for making it obvious I'm in VIM:

if [ "$VIMRUNTIME" != "" ] ; then
    export PS1="\u@\h \W \t$ vim> "
fi

3
ответ дан 3 December 2019 в 05:58
поделиться

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

Посмотрите : help remote.txt в Vim.

Если ваша версия vim была скомпилирована с помощью + clientserver , вы можете использовать vim для создать сервер vim, а затем выполнять на нем команды, например, открывать другой файл.
Переключатель - имя сервера может создавать новый сервер, а переключатель - удаленный может отправлять ему дополнительные команды или файлы.

например

vim --servername test file1.txt
vim --servername test --remote file2.txt

У меня был посмотрите, а vim, который я использую в качестве стандартного для xubuntu на одном из моих компьютеров, не имеет его, но есть несколько инструкций здесь , которые могут помочь, если у вас он скомпилирован. Если это не так, установка gvim и символическая ссылка, очевидно, возможны (поскольку gvim включен по умолчанию) или компиляция двоичных файлов из исходного кода.

Изменить:
Я больше играл с gvim и это невозможно сделать в терминале. Control-Z приостанавливает выполнение задания на уровне процесса. Я думал, что это может работать с экраном, но, похоже, связь не происходит, если gvim не запущен в графическом окне,

6
ответ дан 3 December 2019 в 05:58
поделиться

Вы можете разделить текущий экран и открыть два (или более) файла в следующих способ:

Для горизонтального разделения выполните:

:sp 'filename'

, а для вертикального разделения выполните:

:vsp 'filename'

Для перехода между ними нажмите ctrl + w, затем с помощью клавиши со стрелкой перейдите к файлу, который вы хотите edit.

Кроме того, если вы хотите просто переключать файлы (и иметь только один открытый), вы можете сделать это:

:e 'filename'
3
ответ дан 3 December 2019 в 05:58
поделиться

Добрый день,

Или, если вы хотите иметь несколько файлов, но использовать все окно vim для одного файла за раз, вы можете просто ввести

:e 'filename'

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

:ls

. Чтобы переключаться между открытыми вами файлами, вы можете использовать cntl- ^ (shift-cnt-6), и это будет чередоваться между основными и дополнительными файлами (показано с a% и # в списке файлов)

Или вы можете ввести

:n b

, где n - номер в начале нужного файла в списке, отображаемом командой 'ls'.

HTH

ура,

2
ответ дан 3 December 2019 в 05:58
поделиться

Вы можете установить функцию скрытый в vim, чтобы позволить ему открывать несколько файлов:

:set hidden

Затем вы можете открывать столько файлов, сколько хотите, не беспокоясь чтобы сохранять их каждый раз, когда вы хотите переключать "буфер":

:e 'filename'

У вас есть несколько команд для навигации по буферам:

:bnext
:bprev
:buffers

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

Я бы посоветовал прочитать это , чтобы получить хорошее представление о vim, это сэкономит вам много времени.

Удачи!

1
ответ дан 3 December 2019 в 05:58
поделиться

Это легко сделать, если вы скомпилировали VIM с + clientserver , как Энди предложил в предыдущем ответе .

Я сделал следующее :

Я запустил VIM как сервер:

vim --servername abc

Я приостановил его с помощью CTRL + Z и сделал:

vim --servername abc --remote ~/.cshrc
fg 

Теперь VIM открыл ~ / .cshrc .

Затем я сделал:

vim --servername abc --remote ~/.aliases
fg 

Теперь у VIM был один буфер с ~ / .cshrc , а другой с ~ / .aliases .

Затем я сделал:

vim --servername abc --remote-tab ~/foo_bar
fg 

И теперь у меня VIM была одна вкладка с двумя предыдущими открытыми буферами и другая вкладка с ~ / foo_bar открытой.

В случаях вызова VIM работал в терминале, а не как графический интерфейс.

5
ответ дан 3 December 2019 в 05:58
поделиться