Zakładając, że bieżący bufor jest plikiem otwartym do edycji, więc :e
się nie wyświetla E32: No file name
.
Chciałbym wyszarpać jeden lub wszystkie z:
- Nazwa pliku dokładnie taka sama jak w wierszu stanu, np
~\myfile.txt
- Pełna ścieżka do pliku, np
c:\foo\bar\myfile.txt
- Tylko nazwa pliku, np
myfile.txt
Odpowiedzi:
TL; DR
:let @" = expand("%")
>Spowoduje to skopiowanie nazwy pliku do nienazwanego rejestru , a następnie możesz użyć starego, dobrego,
p
aby go wkleić. i oczywiście możesz przypisać to do klucza w celu szybszego użycia.:nmap cp :let @" = expand("%")<cr>
możesz także użyć tego dla pełnej ścieżki
:let @" = expand("%:p")
Wyjaśnienie
Vim używa rejestru nienazwanego do przechowywania tekstu, który został usunięty lub skopiowany (szarpany), podobnie po wklejeniu czyta tekst z tego rejestru.
Za pomocą
let
możemy ręcznie przechowywać tekst w rejestrze za pomocą,:let @" = "text"
ale możemy również zapisać wynik wyrażenia.W powyższym przykładzie używamy funkcji,
expand
która rozwija symbole wieloznaczne i słowa kluczowe. w naszym przykładzie używamyexpand('%')
do rozszerzenia bieżącej nazwy pliku. Możemy go zmodyfikować tak, jakexpand('%:p')
w przypadku pełnej nazwy pliku.Zobacz
:help let
:help expand
:help registers
szczegółyźródło
unnamedplus
jako schowkalet @+ = expand("%")
"%:h"
aby uzyskać pełną ścieżkę bez nazwy pliku.Prawie o co prosisz, a może to zrobić:
Ctrl+R %
pobiera bieżącą nazwę pliku do miejsca, w którym się znajdujesz (wiersz polecenia, bufor edycji, ...). Zobacz ten poradnik Vima, aby uzyskać więcej.źródło
Ctrl+R %
działa winsert
trybie - ale wedit
trybieCtrl+R
oznacza ponawianie.Jeśli chcesz umieścić bieżącą nazwę pliku bufora w schowku na poziomie systemu, spróbuj zmienić rejestr na @ +:
Edytuj 20140421: Często ich używam, więc stworzyłem kilka skrótów. Linux Vims najwyraźniej działają nieco inaczej niż Mac Vims , więc jest to również specjalny przypadek. Jeśli umieścisz w swoim
~/.vimrc
:Na przykład
<leader>cf
skopiuje ścieżkę względną bieżącego bufora (domyślną linią wiodącą jest ukośnik odwrotny (\
)). Często używam ich do uruchamiania poleceń w pliku lub robienia innych rzeczy w wierszu poleceń. Tak naprawdę nie używam często ostatniej nazwy pliku / katalogu.Możesz rozważyć bardziej intuicyjne odwzorowania, takie jak
<leader>cfr
względne,<leader>cfa
bezwzględne,<leader>cff
tylko nazwa pliku<leader>cfd
lub katalog.źródło
"*
i"+
są równoważne, dzięki czemu można zrezygnować z kontroli na pomoście i wystarczy użyć@+
Jeśli to zrobisz
:reg
, zobaczysz nazwę bieżącego pliku w%
rejestrze. Możesz go"%p
na przykład wkleić .Jeśli, podobnie jak ja, często przełączasz się na bufor „alternatywny”, bardzo przydatne jest umieszczenie w
#
rejestrze jego pełnej ścieżki i nazwy pliku . Możesz go"#p
na przykład wkleić .Uwaga (na wypadek, gdyby było to zachowanie specyficzne dla mojej konfiguracji): Używam VIM 7.4.52 na Ubuntu 14.04.4 LTS.
źródło
Łączenie informacji z kilku innych odpowiedzi: Jeśli chcesz zszarpać bieżącą pełną ścieżkę do pliku i umieścić ją w buforze poleceń w innym oknie, najpierw zrób
:let @" = expand("%:p")
, a następnie przejdź do innego okna i wpiszCtrl+R "
.Przydatne do kopiowania pliku podczas pozostawania w tym samym katalogu i utrzymywania starego otwartego. Na przykład:
źródło
Oto moje rozwiązanie:
źródło
Korzystam z xclipa, aby uzyskać dostęp do schowka X, więc używam:
źródło