Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
System.CommandLine
actualmente está en versión preliminar y esta documentación es para la versión 2.0 beta 5.
Cierta información se relaciona con el producto de versión preliminar que puede modificarse sustancialmente antes de su lanzamiento. Microsoft no ofrece ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.
Las aplicaciones que usan System.CommandLine
tienen compatibilidad integrada con la finalización de tabulaciones en determinados shells. Para habilitarlo, el usuario final debe realizar algunos pasos una vez por shell. Una vez hecho esto, la finalización de tabulación es automática para los valores estáticos de la aplicación, como valores de enumeración o valores definidos mediante una llamada a System.CommandLine.Option<T>.AcceptOnlyFromAmong
. También puede personalizar la finalización de tabulación proporcionando valores dinámicamente en tiempo de ejecución.
Habilitación de la finalización de tabulación
En el equipo en el que desea habilitar la finalización de pestañas, siga estos pasos.
Para la CLI de .NET:
Para otras aplicaciones de línea de comandos basadas en System.CommandLine
:
Instale la
dotnet-suggest
herramienta global.Agregue el script de correcciones de compatibilidad (shim) adecuado al perfil de shell. Es posible que tenga que crear un archivo de perfil de shell. El script de correcciones de compatibilidad reenvía las solicitudes de finalización del shell a la
dotnet-suggest
herramienta, que las delega a la aplicación basada en el adecuadoSystem.CommandLine
.Para
bash
, agregue el contenido de dotnet-suggest-shim.bash a ~/.bash_profile.Para
zsh
, agregue el contenido de dotnet-suggest-shim.zsh a ~/.zshrc.Para PowerShell, agregue el contenido de dotnet-suggest-shim.ps1 al perfil de PowerShell. Para encontrar la ruta de acceso esperada al perfil de PowerShell, ejecute el siguiente comando en la consola:
echo $profile
Registre la aplicación llamando a
dotnet-suggest register --command-path $executableFilePath
, donde$executableFilePath
es la ruta de acceso al archivo ejecutable de la aplicación.
Una vez configurado el shell del usuario y registrado el archivo ejecutable, las finalizaciones funcionarán para todas las aplicaciones compiladas mediante System.CommandLine
.
Para cmd.exe en Windows (símbolo del sistema de Windows) no hay ningún mecanismo de finalización de tabulación conectable, por lo que no hay ningún script de correcciones de compatibilidad disponible. Para otros shells, busque un problema de GitHub con la etiqueta Area-Completions
. Si no encuentra ningún problema, puede abrir uno nuevo.
Obtención de valores de finalización de tabulación en tiempo de ejecución
El código siguiente muestra una aplicación que recupera valores para la finalización de tabulaciones dinámicamente en tiempo de ejecución. El código obtiene una lista de las dos próximas semanas de fechas después de la fecha actual. La lista se proporciona a la --date
opción llamando a CompletionSources.Add
:
using System.CommandLine;
using System.CommandLine.Completions;
using System.CommandLine.Parsing;
new DateCommand().Parse(args).Invoke();
class DateCommand : Command
{
private Argument<string> subjectArgument = new("subject")
{
Description = "The subject of the appointment."
};
private Option<DateTime> dateOption = new("--date")
{
Description = "The day of week to schedule. Should be within one week."
};
public DateCommand() : base("schedule", "Makes an appointment for sometime in the next week.")
{
this.Arguments.Add(subjectArgument);
this.Options.Add(dateOption);
dateOption.CompletionSources.Add(ctx => {
var today = System.DateTime.Today;
List<CompletionItem> dates = new();
foreach (var i in Enumerable.Range(1, 7))
{
var date = today.AddDays(i);
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
}
return dates;
});
this.SetAction(parseResult =>
{
Console.WriteLine($"Scheduled \"{parseResult.GetValue(subjectArgument)}\" for {parseResult.GetValue(dateOption)}");
});
}
}
Los valores que se muestran cuando se presiona la tecla Tab se proporcionan como CompletionItem
instancias:
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
Se establecen las siguientes CompletionItem
propiedades:
-
Label
es el valor de finalización que se va a mostrar. -
SortText
garantiza que los valores de la lista se presentan en el orden correcto. Se establece convirtiendoi
en una cadena de dos dígitos, por lo que la ordenación se basa en 01, 02, 03, etc., hasta 14. Si no establece este parámetro, la ordenación se basa en ,Label
que en este ejemplo tiene un formato de fecha corta y no se ordenará correctamente.
Hay otras CompletionItem
propiedades, como Documentation
y Detail
, pero aún no se usan en System.CommandLine
.
La lista de finalización de pestañas dinámicas creada por este código también aparece en la salida de la ayuda:
Description:
Makes an appointment for sometime in the next week.
Usage:
schedule <subject> [options]
Arguments:
<subject> The subject of the appointment.
Options:
--date The day of week to schedule. Should be within one week.
<2/4/2022|2/5/2022|2/6/2022|2/7/2022|2/8/2022|2/9/2022|2/10/2022>
--version Show version information
-?, -h, --help